代码随想录算法训练营第四天| 24. 两两交换链表中的节点

题目和讲解链接:https://programmercarl.com/0024.%E4%B8%A4%E4%B8%A4%E4%BA%A4%E6%8D%A2%E9%93%BE%E8%A1%A8%E4%B8%AD%E7%9A%84%E8%8A%82%E7%82%B9.html

我自己画的理解示意图:

from typing import Optional


# 定义链表节点类
class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next


# 实现交换链表中相邻节点的类
class Solution:
    def swapPairs(self, head: ListNode) -> ListNode:
        dummy_head = ListNode(next=head)  # 创建一个虚拟头节点
        current = dummy_head

        # 必须有当前节点的下一个和下下个才能交换,否则说明已经交换结束
        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 = current.next.next

        return dummy_head.next  # 返回交换后的链表头部


# 将列表转换为链表
def list_to_linkedlist(nums):
    dummy_head = ListNode(0)
    current = dummy_head
    for num in nums:
        current.next = ListNode(num)
        current = current.next
    return dummy_head.next


# 将链表转换为列表(方便打印)
def linkedlist_to_list(head):
    nums = []
    current = head
    while current:
        nums.append(current.val)
        current = current.next
    return nums


# 测试代码
solution = Solution()
head = list_to_linkedlist([1, 2, 3, 4])  # 输入 [1, 2, 3, 4]
result_head = solution.swapPairs(head)  # 交换相邻节点
result = linkedlist_to_list(result_head)  # 将链表转换为列表
print("交换后的链表:", result)  # 输出结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值