LeetCode热题Hot100 - 两两交换链表中的节点

一刷~

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。

思路:

使用两个指针p1/p2,分别记录需要交换的两个节点。另外使用一个指针last,记录两个节点的上一个节点。 last.next = p2,p1.next = p2.next(记录p2后面的值,如果直接p2.next = p1,则p2后面待交换的节点会丢失),last.next.next = p1,完成交换。last指针往后移两个,重新生成p1和p2。

python 复制代码
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def swapPairs(self, head: Optional[ListNode]) -> Optional[ListNode]:
        if not head or not head.next:
            return head
        
        p = ListNode(0)
        p.next = head

        p1, p2, last = head, head.next, p

        while p1 and p2:
            last.next = p2
            p1.next = p2.next
            last.next.next = p1
            last = p1

            if last.next:
                p1 = last.next
            else:
                break
            if p1.next:
                p2 = p1.next
            else:
                break
        
        return p.next
相关推荐
lvwangshu21 分钟前
图论:LCA、树的直径、树的重心、二分图与 Tarjan 缩点
算法·图论
302wanger1 小时前
干与湿:AI 拿走脑力之后,人剩下什么
算法
计算机编程-吉哥2 小时前
脑肿瘤MRI智能识别系统:基于深度学习的像素级脑肿瘤语义分割平台【计算机毕业设计选题推荐】
人工智能·python·深度学习·算法·毕业设计·课程设计·大数据毕业设计选题推荐
用户204937554952 小时前
端侧语音部署踩坑:模型能跑不等于终端真的能用
后端·算法
shehuiyuelaiyuehao3 小时前
算法39,位运算,消失的两个数字
java·数据结构·算法
ZiLing3 小时前
2026 ROS 2 Lyrical 踩坑实录(一):编译与依赖——rosdep、现代 CMake 与 CMake 4.x
算法
Murphy_lx3 小时前
1124. 表现良好的最长时间段
c++·算法
aramae3 小时前
模拟实现strstr函数(C语言)
c语言·开发语言·算法
liliangcsdn3 小时前
因子权重矩阵处理-滞回缓冲带+降频稳定化动态重选
开发语言·python·算法
敲代码的嘎仔3 小时前
自己设计了一个兑换码算法:自增ID + Base32转码 + 按位加权签名 + 异或混淆,面试被追问细节时终于不用慌了
java·数据库·mysql·算法·微服务·面试·职场和发展