【LeetCode】206. 反转链表

题目链接:206. 反转链表

我的做法和官方题解略有不同,在此记录一下。

思路

三个指针配合,一个用于保存原有的路径,两个用于反转。

解题过程

设置三个指针 first, second, thrid 分别指向相邻的三个节点。将first和second之间的路径(next指向)反转,然后依次按原路径向前移动这三个指针。当second指针为空的时候,结束循环,first指针即为反转后的头节点。

退化情况处理:当节点个数小于等于1时,返回head。

复杂度

  • 时间复杂度: O(n)
  • 空间复杂度: O(1)

代码

python3 复制代码
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
        # 零个和一个节点的退化情况
        if head == None or head.next == None:
            return head

        first = head
        second = head.next
        first.next = None # 去掉环

        while second != None:
            third = second.next # 防丢
            second.next = first # 反转
            first = second # 向前移动
            second = third
        return first
相关推荐
文心快码BaiduComate10 小时前
光本位联合文心快码打造面向光电芯片研发的全栈AI Agent Lightmate
算法
一次旅行10 小时前
ViT/CLIP/LLaVA/GPT-4V/VideoLLM多模态架构全解:原理仿真+工业落地选型+完整推理代码
人工智能·算法·架构
神明不懂浪漫11 小时前
【第五章】队列
开发语言·数据结构·经验分享·笔记·算法
happy_baymax11 小时前
MATLAB MCP Server+ MATLAB Agentic Toolkit+Simulink Agentic Toolkit自动更新批处理文件.ps1
人工智能·算法
神明不懂浪漫12 小时前
【第六章】二叉树
开发语言·数据结构·经验分享·笔记·算法
橘和柠12 小时前
知识图谱实战(一):数据采集与实体关系抽取(完整代码)
算法
Mem0rin12 小时前
前缀和:中心下标与数组乘积
数据结构·算法
Lazionr12 小时前
list容器详解——双向链表的封装与使用
数据结构·c++·链表·list
windliang12 小时前
Claude Code 源码分析(八):Memory 如何被写入、整理与按需召回
前端·算法·面试
漂流瓶jz12 小时前
UVA-12174 Shuffle的播放记录 题解答案代码 算法竞赛入门经典第二版
数据结构·c++·算法·图论·滑动窗口·算法竞赛入门经典·uva