Leetcode -- 21\. 合并两个有序链表 -- Golang AC Code

21. 合并两个有序链表

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

示例 1:

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

输入:l1 = [], l2 = []
输出:[]
示例 3:

输入:l1 = [], l2 = [0]
输出:[0]

提示:

两个链表的节点数目范围是 [0, 50]
-100 <= Node.val <= 100
l1 和 l2 均按 非递减顺序 排列
通过次数867,716提交次数1,301,052

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-two-sorted-lists
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


和并归排序的思路差不多,不过需要注意的是在移动指针的时候不要丢失指针位置,一个是头指针的记录,另一个就是节点的当前位置,再一个就是两个链表可能出现不等长的情况,这时候要在程序结束时将未遍历完的指针链接到拼接后的链表末尾。


/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */

func mergeTwoLists(list1 *ListNode, list2 *ListNode) *ListNode {

    if list1 == nil{
        return list2
    }

    if list2 == nil{
        return list1
    }

    var head, pointer *ListNode

    if list1.Val > list2.Val{
        head = list2
        list2 = list2.Next
    }else{
        head = list1
        list1 = list1.Next
    }
    pointer = head

    for list1 != nil && list2 != nil{
        if list1.Val > list2.Val{
            pointer.Next = list2
            list2 = list2.Next
        }else{
            pointer.Next = list1
            list1 = list1.Next
        }
        pointer = pointer.Next
    }

    if list1 != nil {
        pointer.Next = list1
    }else{
        pointer.Next = list2
    }

    return head
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容