合並兩個有序鏈表的golang實現


將兩個有序鏈表合並為一個新的有序鏈表並返回。新鏈表是通過拼接給定的兩個鏈表的所有節點組成的。

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

注意:

  • 兩個鏈表都是有序的
  • 如果某個鏈表為空,那就直接返回另外一個有序鏈表
//如果有一條鏈是nil,直接返回另外一條鏈
if l1 == nil {
    return l2
}
if l2 == nil {
    return l1
}

然后我們就要比較兩個鏈表的節點的順序了

  • 首先,我們定義一個result指針
  • 比較兩個鏈表的第一個元素哪個比較小
  • result指向小的那個鏈表
先來看一張圖

核心代碼:

func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode {
    //如果有一條鏈是nil,直接返回另外一條鏈
    if l1 == nil {
        return l2
    }
    if l2 == nil {
        return l1
    }
    // 定義一個結果節點
    var res *ListNode
    // 當l1節點的值大於l2節點的值,那么res指向l2的節點,從l2開始遍歷,反之從l1開始
    if l1.Val >= l2.Val {
        res = l2
        res.Next = mergeTwoLists(l1, l2.Next)
    } else {
        res = l1
        res.Next = mergeTwoLists(l1.Next, l2)
    }
    return res
}

使用遞歸,不斷去找兩個鏈表中比較小的元素,然后result接上那個元素


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM