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指向原链表的最后一个节点,即反转后的新头节点
    }
};
相关推荐
杜子不疼.18 分钟前
【C++】继承—C++的秘密武器,get父类的智慧
开发语言·c++
ShineWinsu27 分钟前
对于Linux:基于UDP实现简单聊天室功能
linux·c++·面试·udp·笔试·进程·简单聊天室
chase_my_dream37 分钟前
2D-SLAM 真实数据处理与多传感器工程落地:时间同步、异常过滤、标定对齐和系统调试
c++·人工智能·2d-slam
凌波粒1 小时前
LeetCode--53. 最大子序和(贪心算法)
算法·leetcode·贪心算法
Hesionberger1 小时前
快速求解完全平方数的最少数量
开发语言·数据结构·python·算法·leetcode·c#
c238561 小时前
《序列 DP:C++ 中的“最长”套路与编辑距离》
c++·算法·动态规划
aqiu1111111 小时前
【算法日记 19】LeetCode 1. 两数之和:梦开始的地方,哈希表的降维打击
算法·leetcode·职场和发展
鱼子星_1 小时前
【C++】类和对象(下)——初始化列表,类型转换,static成员,友元,内部类,匿名对象,编译器的优化拓展
c语言·c++·笔记
王老师青少年编程9 小时前
2025年【江苏“信息与未来”编程思维】真题及题解(T2:坐标变换)
c++·题解·真题·坐标变换·编程思维·江苏·信息与未来
海石12 小时前
1563分的简单题,可能就简单在能被暴力AC
算法·leetcode