/* 单链表反转/逆序 */ Status ListReverse(LinkList L) { LinkList current,pnext,prev; if(L == NULL || L->next == NULL) return L; current = L->next; /* p1指向链表头节点的下一个节点 */ pnext = current->next; current->next = NULL; while(pnext) { prev = pnext->next; pnext->next = current; current = pnext; pnext = prev; printf("交换后:current = %d,next = %d \n",current->data,current->next->data); } //printf("current = %d,next = %d \n",current->data,current->next->data); L->next = current; /* 将链表头节点指向p1 */ return L; }
Status ListReverse2(LinkList L) { LinkList current, p; if (L == NULL) { return NULL; } current = L->next; while (current->next != NULL) { p = current->next; current->next = p->next; p->next = L->next; L->next = p; } return L; }
typedef struct Node { int data; struct Node *pnext; }Node; Node *head; /* head是逆序后的头结点 */ Node *reverse(Node *p) { if(p == NULL || p->pnext == NULL) { head = p; return head; } reverse(p->pnext)->pnext = p; p->pnext = NULL; return p; }