鍊錶已經有序,可使用雙指標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拼接後的結果,這就形成了遞迴的條件...