合併兩個排序的鏈表
題目描述:
輸入兩個單調遞增的鏈表,輸出兩個鏈表合成後的鏈表,當然我們需要合成後的鏈表滿足單調不減規則。
問題分析:
對於已經排序的兩個鏈表來說,合成一個不減的鏈表,核心就是通過比較,把小的放在鏈表前面,
然後進行逐個元素的循環,當有一個鏈表循環結束之後,就把另一個剩餘的直接掛上去
兩種方式:
1,採用遞歸的方式(核心還是比較)
2,創建一個新鏈表,通過比較,依次掛載節點
代碼展示:
/*function ListNode(x){
this.val = x;
this.next = null;
}*/
function Merge(pHead1, pHead2)
{
//1,採用遞歸的方式
if (pHead1 == null || pHead2 == null){
return pHead1 || pHead2;
}
var newList = null;
if (pHead1.val < pHead2.val){
newList = pHead1;
newList.next = Merge(pHead2,pHead1.next);
} else {
newList = pHead2;
newList.next = Merge(pHead1,pHead2.next);
}
return newList;
//2,創建新鏈表,進行比較賦值,把另一個剩下的直接鏈接到新鏈表的尾部
var p = new ListNode(0),q = p;
while(pHead1 != null&&pHead2 != null){
if(pHead1.val < pHead2.val){
p.next = pHead1;
p = pHead1;
pHead1 = pHead1.next;
}
else{
p.next = pHead2;
p = pHead2;
pHead2 = pHead2.next;
}
}
if(pHead1 != null)
p.next = pHead1;
if(pHead2 != null)
p.next = pHead2;
return q.next;
}
類似
劍指offer-js 反轉鏈表
劍指offer-js 鏈表中倒數第k個結點
總結:
鏈表這塊,操作都在於節點,畢竟一個鏈表就只有val,next兩個屬性,通過兩個節點,三個節點,基本能完成
關於鏈表的問題,像環形鏈表,兩個鏈表的交點等。