单链表的逆置是一个非常经典的问题,这里利用两个思想进行解决。
首先,我们需要看下原理图,其实两个思想都是一样的,都是使后一个的节点的 next 指针指向前一个节点,依次递推,直到第二个节点指向第一个节点,第一个节点的 next 指针指向 NULL。
第一种方法:
在链表往前走的过程中,记录前一个节点,当前节点和后一个节点,并使当前节点的 next 指针指向前一个节点,直到最后一个节点指向倒数第二个节点
算法实现如下:
void reverse_list(LinkList list){ LinkedNode *pre = list; LinkedNode *cur = list->next; LinkedNode *next = NULL; if(list == NULL || list->next == NULL) return; /*在这里实现翻转*/ while(cur != NULL) { next = cur->next; cur->next = pre; pre = cur; cur = next; } list->next = NULL; list = pre; print(list); return;}