go合併兩個有序列表

2021-10-01 21:22:24 字數 966 閱讀 2692

題目:

將兩個有序鍊錶合併為乙個新的有續鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點做成的。

思路:1、如果給定的兩條鍊錶中有一條為空,返回另一條即可

2、若兩條鍊錶都不為空,則在兩條鍊錶中選擇較小的節點作為head,被選中的較小節點所在鍊錶的第二個節點便成了二當家帶領這條鍊錶

3、二當家帶領著這條鍊錶與另一條鍊錶進行比較,始終選擇較小的節點連在head後面。

4、連線好後在返回head時發現,此時的head是合成後的鍊錶的最後乙個節點,而不是頭結點。解決方法是,在第二部選定頭節點時,同時將這個頭結點多賦予乙個變數,同時保持這個標量不動,它始終儲存的是頭結點,這樣到最後返回他就好了,因為存的都是位址啊,與變數名無關。

/**

* definition for singly-linked list.

* type listnode struct

*/// listnode 是鏈結節點

type listnode struct

func mergetwolists(l1 *listnode, l2 *listnode) *listnode

if l2 == nil

// 此時,兩條鏈都不為nil,可以直接使用l.val,而不用擔心panic

// 在l1和l2之間,選擇較小的節點作為head,並設定好node

var head, node *listnode

if l1.val < l2.val else

// 迴圈比較l1和l2的值,始終選擇較小的值連上node

for l1 != nil && l2 != nil else

// 有了這一步,head才是乙個完整的鏈

node = node.next

} if l1 != nil

if l2 != nil

return head

}

Go實現合併兩個有序列表(leetcode 21)

將兩個有序鍊錶合併為乙個新的有序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。示例 輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4 如下 definition for singly linked list.type listnode struct func mergetwo...

合併兩個有序列表

1.尾遞迴 1 def recursion merge sort2 l1,l2,tmp 2if len l1 0 or len l2 0 3tmp.extend l1 4tmp.extend l2 5return tmp6 else 7 if l1 0 dell1 0 10else 11 12del...

leetcode合併兩個有序列表

將兩個有序鍊錶合併為乙個新的有序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。例如 輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4 class solution def mergetwolists self,l1 listnode,l2 listnode listnode ...