[LeetCode By Go 80]21. Merge Two Sorted Lists

題目

Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.

解題思路

新建一個鏈表l3,遍歷l1,l2, 每次比較l1,l2中第一個節點大小,選擇較小的元素放入l3的末尾

  1. 先找到l1,l2中第一個較小的元素,作為l3第一個元素
  2. 遍歷l1,l2,將其中元素插入l3末尾,直到l1,l2中有一個鏈表遍歷完
  3. 如果l1為空,則將l2剩余元素放到l3末尾;如果l2為空,則將l1剩余元素放到l3末尾

代碼

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

    var p3 *ListNode
    p1, p2 := l1, l2
    if p1.Val < p2.Val {
        p3 = p1
        p1 = p1.Next
        p3.Next = nil
    } else {
        p3 = p2
        p2 = p2.Next
        p3.Next = nil
    }
    l3 := p3

    for ;p1 != nil && p2 != nil; {
        if p1.Val < p2.Val {
            tmp := p1
            p1 = p1.Next
            p3.Next = tmp
            p3 = p3.Next
            p3.Next = nil
        } else {
            tmp := p2
            p2 = p2.Next
            p3.Next = tmp
            p3 = p3.Next
            p3.Next = nil
        }
    }
    
    if p1 != nil {
        p3.Next = p1 
    } else {
        p3.Next = p2
    }
    return l3
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容