【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
相关推荐
RTC老炮1 分钟前
webrtc弱网-BBRv2算法原理
网络·算法·webrtc
RTC老炮2 分钟前
webrtc弱网-BBRv1算法原理
网络·算法·webrtc
MobotStone1 小时前
我的 AI 代码清理方法论:从原型到生产,只需 5 步
算法·程序员·架构
沐苏瑶8 小时前
Java 搜索型数据结构全解:二叉搜索树、Map/Set 体系与哈希表
java·数据结构·算法
ZoeJoy89 小时前
算法筑基(二):搜索算法——从线性查找到图搜索,精准定位数据
算法·哈希算法·图搜索算法
Alicx.9 小时前
dfs由易到难
算法·蓝桥杯·宽度优先
_日拱一卒10 小时前
LeetCode:找到字符串中的所有字母异位词
算法·leetcode
云泽80810 小时前
深入 AVL 树:原理剖析、旋转算法与性能评估
数据结构·c++·算法
Wilber的技术分享11 小时前
【LeetCode高频手撕题 2】面试中常见的手撕算法题(小红书)
笔记·算法·leetcode·面试
邪神与厨二病11 小时前
Problem L. ZZUPC
c++·数学·算法·前缀和