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
相关推荐
Cx330❀9 小时前
《C++ 搜索二叉树》深入理解 C++ 搜索二叉树:特性、实现与应用
java·开发语言·数据结构·c++·算法·面试
不染尘.10 小时前
2025_11_5_刷题
开发语言·c++·vscode·算法·贪心算法·动态规划
2501_9291775810 小时前
C++中的虚基类
开发语言·c++·算法
Blossom.11810 小时前
把AI“贴”进路灯柱:1KB决策树让老旧路灯自己报「灯头松动」
java·人工智能·python·深度学习·算法·决策树·机器学习
墨染点香13 小时前
LeetCode 刷题【144. 二叉树的前序遍历】
数据结构·算法·leetcode
cynicme17 小时前
力扣3318——计算子数组的 x-sum I(偷懒版)
java·算法·leetcode
im_AMBER20 小时前
算法笔记 09
c语言·数据结构·c++·笔记·学习·算法·排序算法
凯芸呢20 小时前
Java中的数组(续)
java·开发语言·数据结构·算法·青少年编程·排序算法·idea
寂静山林21 小时前
UVa 1030 Image Is Everything
算法
AI柠檬21 小时前
几种排序算法的实现和性能比较
数据结构·算法·c#·排序算法