0024-leetcode-两两交换链表中的节点-swap-nodes-in-pairs-python&golang

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

示例 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

见图解:https://leetcode-cn.com/problems/swap-nodes-in-pairs/solution/bi-jiao-zhi-jie-gao-xiao-de-zuo-fa-han-tu-jie-by-w/

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
}

posted on 2021-11-04 23:38  进击的davis  阅读(54)  评论(0)    收藏  举报

导航