欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > 206. 反转链表

206. 反转链表

2025/5/9 13:46:55 来源:https://blog.csdn.net/qq_43920838/article/details/146303754  浏览:    关键词:206. 反转链表

目录

  • 一、题目
  • 二、思路
    • 2.1 解题思路
    • 2.2 代码尝试
    • 2.3 疑难问题
    • 2.4 AI复盘
  • 三、解法
  • 四、收获
    • 4.1 心得
    • 4.2 举一反三

一、题目


在这里插入图片描述

二、思路


2.1 解题思路

需要有头尾指针,然后又觉得可以用递归

2.2 代码尝试

class Solution {
public:ListNode* reverseList(ListNode* head) {ListNode* p=head;//尾指针ListNode* tail=new ListNode(0);//把每一个节点拆下来之后,依次从前接上//首节点跟null,其他依次连接首节点while(head){p=head;p->next=tail;tail=p;head=head->next;}return p;}
};

2.3 疑难问题

2.4 AI复盘

class Solution {
public:ListNode* reverseList(ListNode* head) {ListNode* prev = nullptr;  // 用于存储前一个节点ListNode* curr = head;    // 当前节点while (curr != nullptr) {ListNode* nextTemp = curr->next;  // 保存下一个节点curr->next = prev;               // 反转当前节点的指针prev = curr;                      // 移动prev到当前节点curr = nextTemp;                  // 移动curr到下一个节点}return prev;  // prev最终指向反转后的头节点}
};

正确更新指针:在反转链表时,你需要先保存当前节点的下一个节点(nextTemp),然后将当前节点的 next 指针指向前一个节点(prev),最后更新 prev 和 curr 指针。

三、解法


class Solution {
public:ListNode* reverseList(ListNode* head) {if (!head || !head->next) {return head;}ListNode* newHead = reverseList(head->next);head->next->next = head;head->next = nullptr;return newHead;}
};作者:力扣官方题解
链接:https://leetcode.cn/problems/reverse-linked-list/solutions/551596/fan-zhuan-lian-biao-by-leetcode-solution-d1k2/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

四、收获


4.1 心得

不仅要存储先前的节点,还要存储后面的节点。
递归的精髓就是,它能够做到反向遍历,因为在顺序表中,反向遍历很简单,只有i–就行了,链表的反向遍历用递归,就是每次都会从尾部向前就行操作。

4.2 举一反三

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词