LeetCode 24 成对交换节点

1 题目描述

给定一个链表,对每对相邻节点作交换后返回该链表。

注:勿改动节点中的值,仅可改动节点顺序。

例子:

输入:1->2->3->4

输出:2->1->4->3

题目出处:

https://leetcode.com/problems/swap-nodes-in-pairs/

2 解决思路

如图所示,使用三个指针p、q、r指向三个相邻的节点,q.Next = p; p.Next = r.Next即完成一次交换。

3 golang实现代码

https://github.com/olzhy/leetcode/blob/master/24_Swap_Nodes_In_Pairs/test.go

func swapPairs(head *ListNode) *ListNode {
    if nil == head || nil == head.Next {
        return head
    }
    p := head
    head = head.Next
    q := p.Next
    for nil != q {
        r := q.Next
        q.Next = p
        if nil == r {
            p.Next = nil
            break
        }
        if nil == r.Next {
            p.Next = r
            r.Next = nil
            break
        }
        p.Next = r.Next
        p = r
        q = p.Next
    }
    return head
}
若觉得文章对您有所帮助,可以请我喝杯咖啡,Thanks!
微信 支付宝