当前指针要指向操作的两个节点之前
题目描述
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
代码示例
class Solution:
def swapPairs(self, head: Optional[ListNode]) -> Optional[ListNode]:
# 创建虚拟节点,并将其连接到头节点
dummy = ListNode(next=head)
# 使用 current 指针来遍历链表
current = dummy
while current.next and current.next.next:
# 用变量 tmp 指向当前节点的下一个节点
first_node = current.next
second_node = current.next.next
# 更新前后节点的连接关系
current.next = second_node
first_node.next = second_node.next
second_node.next = first_node
# 更新 current 指向已经交换好的节点对的末尾
current = current.next.next
return dummy.next
自己看到题目的第一想法
首先,我意识到要处理链表两两交换的问题,需要引入一个虚拟节点(dummy),以及三个指针pre、cur、after,它们分别指向虚拟节点(dummy)、链表头部(head)、head.next。在每次循环中,我创建一个临时节点(tmp),用于暂存head的下一个节点。然后,通过修改指针的指向,实现两两节点的交换。最后,移动指针,直到遍历完成整个链表。
自己实现过程中遇到哪些困难
在实现过程中,我发现节点之间的交换关系总是容易混淆,特别是在涉及到指针的移动时。这让我反思在解决问题的过程中,对于每一个指针的指向关系都要有清晰而准确的认识,避免出现混乱的情况。