題目:輸入兩個遞增排序的鍊錶,合併這兩個鍊錶並使新鍊錶中的節點仍然是遞增排序的。
示例1:
輸入:1->2->4, 1->3->4
輸出:1->1->2->3->4->4
限制:0 <= 鍊錶長度 <= 1000
一開始的思路是將l2上的節點乙個個拆下來與l1各個節點的值進行比對,然後以此方法將l2節點全部按大小順序插入到l1中,最後返回l1。
**如下:
/**
* definition for singly-linked list.
* struct listnode
* };
*/class
solution
l2->next=q;
r->next=l2;
q=l1;
l2=p;
}return l1;}}
;
結果展示
所以又換了一種方法。這種方法與排序演算法中的歸併排序演算法一致,這裡是將兩個有序的鍊錶歸併到另乙個新煉表中,使之依然有序。
演算法流程:
1.初始化:偽頭節點dum,節點res指向dum。
2.迴圈合併:當l1 或l2為空時跳出;
當l1->val < l2->val時: res的後繼節點指定為l1,並l1向前走一 步;
當l1->val ≥ l2->val 時: res的後繼節點指定為l2 ,並l2向前走一步;
節點res向前走一步,即res = res->next。
3.合併剩餘尾部:跳出時有兩種情況, 即l1為空或l2為空。
若l1≠null :將l1新增至節點res之後;
否則:將l2 新增至節點res之後。
4.返回值:合併鍊錶在偽頭節點 dum之後,因此返回dum->next即啊。
**如下:
/**
* definition for singly-linked list.
* struct listnode
* };
*/class
solution
else
res=res-
>next;
} res-
>next=l1?l1:l2;
return dum-
>next;}}
;
合併兩個排序鍊錶
struct listnode class solution else while pstart1 null pstart2 null plast next pstart1 plast pend1 pend1 pend1 next pstart1 pend1 else plast next psta...
合併兩個排序鍊錶
描述 將兩個排序鍊錶合併為乙個新的排序鍊錶樣例 給出1 3 8 11 15 null,2 null,返回1 2 3 8 11 15 null。解題思路 將兩個鍊錶當中的對應元素的值進行比較,重新確定新鍊錶當中元素的位置。若第乙個鍊錶當前位置的值小於第二個鍊錶當前值,則不需要改變位置,第乙個鍊錶的指標...
合併兩個排序鍊錶
問題描述 將兩個排序鍊錶合併為乙個新的排序鍊錶 樣例 給出1 3 8 11 15 null,2 null,返回1 2 3 8 11 15 null。解題思路 遍歷第二個鍊錶的每乙個節點,然後與第乙個節點的第乙個節點比較,如果第二個鍊錶節點的值小於第乙個,就插入到第乙個煉表裡,如果大於就到下乙個節點。...