📅  最后修改于: 2023-12-03 15:11:16.401000             🧑  作者: Mango
在链表中,我们经常需要交换两个节点的位置。本文将介绍如何在一个链接列表中从开始到结束第 K 个节点交换第 K 个节点。
我们可以遍历整个链表来定位第 K 个节点并将其与第 K 个节点交换位置。具体实现如下:
下面是 Python 代码实现:
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def swapNodes(head: ListNode, k: int) -> ListNode:
# 定义指针 p 和 q
p = q = head
# 将指针 p 移动到第 K-1 个节点的位置
for i in range(k - 1):
p = p.next
# 找到第 K 个节点
nodeK = p.next
# 将指针 q 移动到链表末尾
q = nodeK
while q.next is not None:
q = q.next
# 将前 K-1 个节点的 next 指针指向第 K 个节点的下一个节点
p.next = nodeK.next
# 将第 K 个节点的 next 指针指向前 K-1 个节点
nodeK.next = None
q.next = nodeK
# 如果需要交换头节点
if k == 1:
return q
return head
以下是一些测试样例和函数的输出:
# 测试样例 1
head = ListNode(1, ListNode(2, ListNode(3, ListNode(4, ListNode(5)))))
k = 2
print(swapNodes(head, k)) # Output: [1,4,3,2,5]
# 测试样例 2
head = ListNode(7, ListNode(9, ListNode(6, ListNode(6, ListNode(7, ListNode(8, ListNode(3, ListNode(0, ListNode(9)))))))))
k = 5
print(swapNodes(head, k)) # Output: [7,9,6,6,7,8,3,0,9]
# 测试样例 3
head = ListNode(7, ListNode(9))
k = 1
print(swapNodes(head, k)) # Output: [9,7]