LeetCode热题100——206.反转链表(迭代法)

题目:

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

示例 1:

输入: head = 1,2,3,4,5
输出:5,4,3,2,1

示例 2:

输入: head = 1,2
输出:2,1

示例 3:

输入: head = \[\]
输出:\[\]

题解:

核心要点

  • pre:指向已经反转部分的头节点(初始为 NULL)
  • cur:指向当前要反转的节点(初始为原链表头 head)
  • nextTemp:暂存 cur->next,防止在修改 cur->next 后丢失后续链表

算法步骤

1.初始化:pre = NULL,cur = head

2.遍历链表:当 cur 不为空时,重复以下操作:

  • 暂存 cur 的下一个节点:nextTemp = cur->next
  • 反转指针方向:cur->next = pre
  • 移动 pre 到当前节点:pre = cur
  • 移动 cur 到下一个节点:cur = nextTemp

3.返回新头节点:循环结束后,pre 指向原链表的最后一个节点,即反转后的新头节点,返回 pre。

答案:

cpp 复制代码
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode* pre=NULL;//指向已经反转部分的新链表头
        ListNode* cur=head;//前待反转的节点
        while(cur!=NULL){
            ListNode*nextTemp=cur->next;//暂存下一个节点,防止丢失
            cur->next=pre;//反转指针方向
            pre=cur;//pre移到当前节点
            cur=nextTemp;//cur继续向前处理下一个节点
        }
        return pre;//循环结束时pre指向原链表的最后一个节点,即反转后的新头节点
    }
};
相关推荐
文丑颜不良啊11 小时前
LeetCode201~225题目解析
java·leetcode
努力实干11 小时前
面向对象设计原则——C++
开发语言·c++·数码相机
syagain_zsx14 小时前
jsoncpp 使用指南:编译链接、Json::Value 取值与高频坑
c++·json·库·http格式
Nil20815 小时前
LeetCode 283移动零
数据结构·算法·leetcode
布莱克60515 小时前
理解 = delete 与 = default:两种赋值语义的差异
c++
文丑颜不良啊16 小时前
LeetCode226~250题目解析
java·leetcode
小小、码农16 小时前
[特殊字符]【C++11】类的新功能全面解析:移动构造、移动赋值、default、delete、final 与 override
linux·开发语言·网络·c++
库玛西17 小时前
外部排序全解析:败者树、置换-选择排序与最佳归并树
c语言·数据结构·c++·笔记·考研·算法
General_G18 小时前
创建型模式—原型(Prototype)模式
c++·设计模式·原型模式
syagain_zsx18 小时前
protobuf 实战:从 .proto 到 C++ 序列化的完整链路
c++·学习·程序人生·谷歌·protobuf