我自己画的理解示意图:

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) # 输出结果

2648

被折叠的 条评论
为什么被折叠?



