2020-2-12
- You gotta do what you’re meant to do.
想做什麼就去做。
題目:
將兩個有序鏈表合併爲一個新的有序鏈表並返回。新鏈表是通過拼接給定的兩個鏈表的所有節點組成的。
示例:
輸入:1->2->4, 1->3->4
輸出:1->1->2->3->4->4
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/merge-two-sorted-lists
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。
個人解答:(C版本)
- 主體思路:通過比較兩個鏈表值的大小,切換指針的指向,不斷迭代完成。
- 具體思路看代碼註釋。不過最好還是自己畫圖理解或者查看官方題解的動圖
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){
struct ListNode* q = NULL;
struct ListNode* p = NULL;
struct ListNode* t = NULL;
if(NULL == l1)
{
return l2;
}
if(NULL == l2)
{
return l1;
}
if(l1->val > l2->val)
{
t = l1;
l1 = l2;
l2 = t;
}
q = l1;
p = l2;
while(NULL != q->next)
{
if((p->val >= q->val) && (p->val < q->next->val))
{
t = q->next;
q->next = p;
q = t;
t = p->next;
p->next = q;
q = p;
p = t;
}
else
{
q = q->next;
}
if(NULL == p)
{
return l1;
}
}
q->next = p;
return l1;
}
- 結果:
他山之石:
- 參考了[官方題解]https://leetcode-cn.com/problems/merge-two-sorted-lists/solution/he-bing-liang-ge-you-xu-lian-biao-by-leetcode/),官方依舊提供了迭代和遞歸的方式,其中遞歸的方法真的很精妙,不過理解起來也很複雜。