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指向原链表的最后一个节点,即反转后的新头节点
    }
};
相关推荐
科技苑17 小时前
C++ CAS与ABA问题详解,无锁编程的经典陷阱怎么解决?
c++·人工智能
Pniubi18 小时前
力扣54.螺旋矩阵
算法·leetcode·矩阵
BaiPeter21 小时前
ZPL文件预览
开发语言·c++
悠仁さん1 天前
【C++】哈希表
c++·算法·散列表
Severus_black1 天前
【C++初阶】list使用及相关实现,思路顺滑流畅!
c语言·数据结构·c++·stl·list
敲上瘾1 天前
Qt Widgets入门:项目模板解析与Hello World
开发语言·数据库·c++·qt·ui·qt6.3
二本咕咕-机械转码1 天前
FreeRTOS深入解析(八)IPC机制之FromISR详解
数据结构·单片机·链表
旖旎夜光1 天前
【C++ 基础入门】C++ 多态(中):虚函数表、多态原理与动静绑定
开发语言·c++·笔记·学习
Rain的Java大神之路1 天前
LeetCode 37 解数独面试攻略:回溯 + 位掩码 + MRV,从暴力到毫秒级求解
java·后端·leetcode
旖旎夜光1 天前
【C++ 基础入门】C++多态(下):单/多继承虚表、多态补充与 21 道高频题
开发语言·c++·笔记·学习