>>975
リストとノードの構造を分けて、
リストが先頭と末尾を保持するのが簡単だわな

typedef struct list {
 struct node *first;
 struct node *last;
} list;

position endl(list l) { return l->last; }
position start(list l) { return l->first; }
list initlist() {
  list *l = malloc(sizeof(list));
  l->first = l->last = (struct node*)list;
}