typedef struct node { char name[20]; struct node *prior,*next; }STU; /*逆置双链表的原理,依次将原链表中的结点 用头插法插入到新的链接表中,新的链表不用分配内存*/ STU *reverse(stud *head) { STU *p,*r,*h; /* p用来指向原链表中的第一个结点,待链入新链表头的结点 r用来指向原链表中的第二个结点 h用来指向新链表中的第一个结点 */ h=head->next;/*h用来指向链表的第一个结点*/ if(h&&h->next) { p=h; r=p->next;/*r指向p的下一个结点*/ p->next=NULL;/*让p的下一个结点为NULL*/ while(r) { p=r;/*p指向r结点*/ r=r->next;/*r继续指向下一个结点*/ p->next=h;/*p的后继指向链表的第一个结点h*/ h->prior=p;/*链表的第一各结点h的前驱指向p*/ h=p;/*p链入链表后,p就成为了链表的第一个结点*/ } head->next=h;/*头结点head的后继指向新链表的第一个结点h*/ h->prior=head;/*新链表的第一结点h的前驱指向头结点head*/ return head; } }