LC206题————反转链表

题目难度:简单

Posted by 谢玄xx on March 4, 2022

解题思路

常见的链表操作为——添加一个哑节点(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;
}