LeetCode 206 - 反转链表

解题思路

  1. 我们可以使用迭代的方法来实现链表的反转,这里我们先介绍迭代的方法。
  2. 迭代的思路是:从头节点开始,依次将节点的next指针进行反转,使得当前节点的next指向其前一个节点,然后依次向后移动指针,直至链表末尾。
  3. 反转过程中需要用到三个指针:prev表示前一个节点,curr表示当前节点,nextTemp表示下一个节点。在每次迭代中,需要先记录下nextTemp,然后将当前节点的next指向prev,最后将prev和curr向后移动。

算法实现

C++实现

cpp 复制代码
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode*cur=head;
        ListNode*pre=NULL;
        while(cur)
        {
            ListNode*tmp=cur->next;
            cur->next=pre;
            pre=cur;
            cur=tmp; 
        }
        return pre;
    }
};

复杂度分析

  • 时间复杂度:O(n),其中n是链表的长度。需要访问链表的所有节点进行反转操作。
  • 空间复杂度:O(1),只使用了常数级别的额外空间。

总结

通过迭代的方法,我们可以高效地实现链表的反转操作,并且时间复杂度和空间复杂度都相对较低。这样的实现方法在实际应用中具有较好的性能表现和可扩展性,适用于大规模的链表数据。

希望这篇博客能对你有所帮助,如果有任何问题,欢迎和我一起讨论。

相关推荐
汉克老师1 分钟前
GESP2026年9月认证C++三级( 第三部分编程题(2、分割字符串))精讲
c++·gesp·小学生·学c++编程
估值探索者10 分钟前
【Python量化系统工程化 #08】关了 SSH 就停?systemd 让脚本开机自启 + 异常自动拉起
java·c++·人工智能·分类·数据挖掘
RAN114267600821 分钟前
1.3第一个程序的介绍
开发语言·qt
天若有情67321 分钟前
C++花式魔改!手写头文件复刻Java语法,彻底打破编码思维定式
java·c++·语言做语言·jac++
qq_199886871 小时前
第7板块·第3节:CUTLASS 的 GEMM 实现与优化策略
c++·人工智能·gpu算力·cuda
hetao17338371 小时前
2026-09-17 hetao1733837 的刷题记录
c++·算法
blue_ice .1 小时前
Verilog DDS 数字信号发生器:DAC 输出模拟波形与 ADC 回采观测
开发语言·单片机·嵌入式硬件·fpga开发
远翔调光芯片^138287988721 小时前
ECP5702能芯科技PD取电芯片在市场上的优势有哪些?
开发语言·人工智能·单片机·嵌入式硬件·智能家居
午彦琳2 小时前
2026.9.17
数据结构·算法·leetcode
shada2 小时前
Boost.Process v2 在旧内核上报 `assign: Bad file descriptor`
c++