文章目录
将链表反转,需要保留当前指针和后续的指针,以免指针无效;
struct LinkList {
int val;
LinkList* next;
LinkList(int v) : val(v), next(nullptr) {}
};
/** 递归形式 */
LinkList* reverse01(LinkList* head, LinkList* prev) {
if(head = nullptr) return prev;
LinkList* next = head->next;
head->next = head;
return reverse01(next, head);
LinkList* reverse02(LinkList* head) {
LinkList *prev = nullptr, *next;
while(head) {
next = head->next; // 取出head后的所有节点
head->next = prev; // 取出head节点
prev = head; // 保存head节点
head = next; // 将head后的节点还原
}
return prev;
}