链表题解——两两交换链表中的节点【LeetCode】

全部题目来自力扣,这里只做学习的记录,内容中部分为AI生成,有不对的地方可以评论或者私信哦~~

24. 两两交换链表中的节点

python 复制代码
# 递归版本

class Solution:
    def swapPairs(self, head: Optional[ListNode]) -> Optional[ListNode]:
        if head is None or head.next is None:
            return head

        # 待翻转的两个node分别是pre和cur
        pre = head
        cur = head.next
        next = head.next.next
        
        cur.next = pre  # 交换
        pre.next = self.swapPairs(next) # 将以next为head的后续链表两两交换
         
        return cur

代码执行示例

假设链表为:1 -> 2 -> 3 -> 4 -> None

执行过程:

  1. 第一次递归调用:
    • pre = 1,cur = 2,next = 3
    • 交换 pre 和 cur:2 -> 1
    • 递归处理 next = 3,得到交换后的链表 4 -> 3
    • 将 pre.next(即 1.next)指向 4 -> 3,最终链表为 2 -> 1 -> 4 -> 3 -> None
    • 返回 cur = 2,即交换后的新链表头节点。

最终链表为:2 -> 1 -> 4 -> 3 -> None

python 复制代码
# Definition for singly-linked list.

class Solution:
    def swapPairs(self, head: ListNode) -> ListNode:
        dummy_head = ListNode(next=head)
        current = dummy_head
        
        # 必须有cur的下一个和下下个才能交换,否则说明已经交换结束了
        while current.next and current.next.next:
            temp = current.next # 防止节点修改
            temp1 = current.next.next.next
            
            current.next = current.next.next
            current.next.next = temp
            temp.next = temp1
            current = current.next.next
        return dummy_head.next
相关推荐
垆边人似月.10 小时前
华为机试题 :和为 K 的子数组个数
算法·leetcode·华为
imgsq11 小时前
电子学会考级 vs CCF-GESP:两套少儿编程考级怎么选
python·青少年编程
夏幻灵11 小时前
每日一题:LeetCode 165:比较版本号
算法·leetcode·职场和发展
Navigator_Z11 小时前
LeetCode //C - 1288. Remove Covered Intervals
c语言·算法·leetcode
Smoothcloud润云11 小时前
PyTorch推理服务动态批处理实战:兼顾吞吐与延迟
人工智能·pytorch·python·深度学习·ai·gpu算力
码爸11 小时前
决策树介绍与示例
python·算法·机器学习
临床数据科学和人工智能兴趣组12 小时前
正则表达式的基础语法的基本符号
开发语言·人工智能·python·正则表达式·r语言·r语言-4.2.1·workbudyy
王中阳Go12 小时前
Go 后端转 AI:非科班怎么补?一张 3 列路线表(可保存)
开发语言·人工智能·后端·python·golang·大语言模型
计算机编程指导师12 小时前
【计算机毕设选题推荐】基于Hadoop的宫颈癌变进程光谱数据分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·数据分析·spark·毕业设计·宫颈癌变
0+11112 小时前
算法 --链表
数据结构·算法·leetcode·链表