给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例 1:
输入:head = [1,2,3,4]
输出:[2,1,4,3]
示例 2:
输入:head = []
输出:[]
示例 3:
输入:head = [1]
输出:[1]
提示:
链表中节点的数目在范围 [0, 100] 内
0 <= Node.val <= 100
进阶:你能在不修改链表节点值的情况下解决这个问题吗?(也就是说,仅修改节点本身。)
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/swap-nodes-in-pairs
python
# 0024.交换链表节点
class ListNode:
def __init__(self, val):
self.val = val
self.next = None
class Solution:
def swapPairs(self, head: ListNode) -> ListNode:
"""
多指针交换, 先画图再写代码
:param head:
:return:
"""
dummy = ListNode(-1)
dummy.next = head
tmp = dummy
while tmp.next and tmp.next.next:
p1, p2 = tmp.next, tmp.next.next
tmp.next, p1.next = p2, p2.next
p2.next = p1
tmp = tmp.next.next
return dummy.next
golang
// 多指针-三指针交换,画图实现
func swapPairs(head *ListNode) *ListNode {
dummy := &ListNode{}
dummy.Next = head
tmp := dummy
for tmp.Next != nil && tmp.Next.Next != nil {
p1, p2 := tmp.Next, tmp.Next.Next
tmp.Next, p1.Next = p2, p2.Next
p2.Next = p1
tmp = tmp.Next.Next // 完成新的循环
}
return dummy.Next
}