合并两个排序的链表

合并两个排序的链表

输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。

示例1:

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/he-bing-liang-ge-pai-xu-de-lian-biao-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

实现的思考步骤

  1. 肯定双指针了
  2. 指针拆分麻烦,不如创建个链表,比较两个链表的值
  3. 在前面有个头指针,这很巧妙

实现代码

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode {
    if l1 == nil {
        return l2
    }
    if l2 == nil {
        return l1
    }

    res := &ListNode{}
    // 记录头指针
    head := res
    
    for {
        if l1 == nil {
            res.Next = l2
            break
        }
        if l2 == nil {
            res.Next = l1
            break
        }

        if l1.Val < l2.Val {
            res.Next = &ListNode{
                Val: l1.Val,
                Next: nil,
            }
            l1 = l1.Next
        } else {
            res.Next = &ListNode{
                Val: l2.Val,
                Next: nil,
            }
            l2 = l2.Next
        }

        res = res.Next
    }

    return head.Next
}
原文地址:https://www.cnblogs.com/maomaomaoge/p/14920793.html