leetcode-两两交换链表中的节点

题目
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题。

交换链表节点

示例
输入:head = [1,2,3,4]
输出:[2,1,4,3]

示例1
输入:head = []
输出:[]

示例2
输入:head = [1]
输出:[1]

分析
很显然,简单的思路是每一轮循环取出当前节点和下一个节点,交换位置并赋值给目标链表,然后从原链表中剔除这两个节点。直到链表遍历完成。

func swapPairs(head *ListNode) *ListNode {
    if head == nil {
        return nil
    }

    target := &ListNode{0, nil}
    tail := target // 定义尾节点
    for head != nil && head.Next != nil {
        n0 := head
        n1 := head.Next
        n0.Next = nil
        n2 := n1.Next

        n1.Next = n0
        head = n2
       //将新链表赋值给尾节点
        tail.Next = n1
       // 更新尾节点
        tail = tail.Next.Next
    }

    if head != nil {
        tail.Next = head
    }
    return target.Next
}

提交测试,通过。

* 55/55 cases passed (1 ms)
* Your runtime beats 16.89 % of golang submissions
* Your memory usage beats 99.09 % of golang submissions (2.1 MB)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容