解题思路
常见的链表操作为——添加一个哑节点(dummy node) 这个dummy的next指针指向head.如此我们就不需要对头节点进行其他操作了。 但请注意,程序写完一定要把dummy delete掉!
代码如下:
#include<iostream>
using namespace std;
//以1,2,3,4,5为例:
ListNode* reverseList(ListNode* head)
{
if(!head || !head->next)
{
//直到当前节点的下一个节点为空时,返回上一个节点
//由于5妹有下一个节点了,所以就返回5
return head;
}
//下一行:递归传入下一个节点,目的是为了到达下一个节点
ListNode* newhead = reverseList(head->next);
//第一轮出栈,head为5,head->next为空,返回5
//第二轮出栈,head为4,head->next为5,执行下一句,head->next->next = 4;
// 把当前节点子节点的子节点指向当前节点。此时链表为1->2->3->4<->5.
// 由于4和5双向奔赴了,此时必须断开4指向5这条路。即head->next = nullptr;
// 此时结果为1->2->3->4<-5,返回5.
head->next->next = head;
head->next = nullptr;
return newhead;
}
int main()
{
return 0;
}