{{docContent.title}}

(链表)合并有序链表

题目:

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

示例:

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

题解

我们这里利用到了一个前哨节点,因为两个链表实际上是已经排好序了,所以我们只需要比较两个节点谁大谁小,找到小的接上去,然后那个接上去的指针后移一位。

实际代码如下

    // 创建一个哨兵节点
    prehead := &ListNode{}
    // 这个result用于存储最终结果
    result := prehead
    // 不断循环遍历,直达两个指针都为空
    for l1 != nil && l2 != nil {
        // 比较两个节点,找出小那个节点
        if l1.Val < l2.Val {
            // 哨兵节点的下一个值为小的那个
            prehead.Next = l1
            // l1的值向下切换
            l1 = l1.Next
        }else{
            // 这里说明l2才是小的那个
            prehead.Next = l2
            l2 = l2.Next
        }
        // 哨兵节点下移
        prehead = prehead.Next
    }
    // 如果一个节点为空另外的节点不为空的话我们就直接把下面的节点直接给接上去
    if l1 != nil {
        prehead.Next = l1
    }
    if l2 != nil {
        prehead.Next = l2
    }
    return result.Next