LeetCode21 合併2個有序鍊錶

2021-10-23 05:41:15 字數 847 閱讀 6084

鍊錶已經有序,可使用雙指標l1和l2,分別指向第乙個和第二個鍊錶。再設定乙個指向新煉表頭節點的指標,以及維護乙個指向新鍊錶最後乙個節點的指標。使用雙指標遍歷遍歷兩個鍊錶,比較後將節點新增到新鍊錶的末尾。

反思:知道要使用雙指標,但是並未想到設定哨兵和尾指標(指向新鍊錶)。一開始的思路是將第二個鍊錶的節一 個乙個插入到第乙個鍊錶中。所以插入有三種情況:(1)在表頭(2)在中間(3)在表尾。麻煩且容易出錯,方向出現錯誤。改變思維,把合併後的新鍊錶當成第三個鍊錶,問題就變為構建第三個鍊錶。將第二個鍊錶中的節點插入到第乙個鍊錶的方法捨棄,改用將合適的節點新增到新鍊錶的中去,。即從兩個鍊錶中選出合適的節點新增到新鍊錶的末尾。由此簡化了步驟,思考起來也簡單。最後就是處理剩下的節點。

struct listnode 

;struct listnode*

mergetwolist

(struct listnode* l1,

struct listnode* l2)

else

}//將剩下的鍊錶節點鏈結起來

if(l1!=

null

) tail->next=l1;

if(l2!=

null

) tail->next=l2;

l1=prehead->next;

free

(prehead)

;return l1;

}

LeetCode 21合併兩個有序列表

將兩個公升序鍊錶合併為乙個新的公升序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4初始解法 這個問題轉換為經典的merge排序中的merge過程.merge排序中merge操作即是將兩個有序子陣列合併成乙個陣列,需要考慮比較過程...

Leetcode 21 合併鍊錶 python

輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,當然我們需要合成後的鍊錶滿足單調不減規則。方法一 非遞迴 coding utf 8 class listnode def init self,x self.val x self.next none class solution 返回合併後列表 def...

leetcode 21 合併公升序鍊錶

將兩個公升序鍊錶合併為乙個新的 公升序 鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。示例 輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4 1.考慮遞迴,如果遍歷的時候,l1節點值小於l2,則返回的應該為此時的l1節點及l1.next和l2拼接後的結果,這就形成了遞迴的條件...