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指向原链表的最后一个节点,即反转后的新头节点
    }
};
相关推荐
北顾笙9802 小时前
day34-数据结构力扣
数据结构·算法·leetcode
小龙报2 小时前
【数据结构与算法】一文拿捏链式二叉树:遍历 + 统计 + 层序 + 完全树
java·c语言·开发语言·c++·人工智能·语言模型·visual studio
量子炒饭大师2 小时前
【优化算法:双指针算法刷题宝典】—— 盛最多水的容器
c++·算法
承渊政道2 小时前
【动态规划算法】(简单多状态dp问题入门与经典题型解析)
数据结构·c++·学习·算法·leetcode·macos·动态规划
南境十里·墨染春水2 小时前
C++笔记——STL map
开发语言·c++·笔记
南境十里·墨染春水3 小时前
C++笔记·-- STL unordered_map
开发语言·c++·笔记
珹洺3 小时前
C++远程调用组件库JsonRpc(一)项目背景、核心概念与环境搭建
开发语言·c++·rpc
王老师青少年编程3 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【部分背包问题】:部分背包问题
c++·算法·贪心·csp·信奥赛·部分背包问题
handler013 小时前
【Linux 笔记】GDB 调试速查手册
linux·运维·c语言·c++·笔记