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指向原链表的最后一个节点,即反转后的新头节点
    }
};
相关推荐
eggrall11 小时前
Linux进程信号——像收快递一样理解 Linux 信号
linux·开发语言·c++
‎ദ്ദിᵔ.˛.ᵔ₎11 小时前
c++ 11左值和右值
c++
Hical_W11 小时前
C++ Web 框架性能实测(Benchmark)
c++·开源
lzh2004091912 小时前
手撕线程池:巩固Linux线程知识
linux·c++
basketball61612 小时前
C++ 命名空间知识点总结:从入门到合理设计
开发语言·c++
handler0112 小时前
【C++ 算法竞赛基础】数论篇:核心公式、经典例题与高频模板
开发语言·c++·算法·蓝桥杯·数论·最大公约数·最小公倍数
fpcc12 小时前
并行编程实战——CUDA编程的打印输出
c++·cuda
程序leo源13 小时前
Qt信号与槽深度详解
c语言·开发语言·数据库·c++·qt·c#
水云桐程序员13 小时前
C++数组详细介绍
开发语言·c++
z2005093013 小时前
今日算法(二叉树)
数据结构·c++·算法