題目描述
輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,當然我們需要合成後的鍊錶滿足單調不減規則。
eg:輸入,輸出
題外話:小范說合在一起,再比大小不就完事了,這顯然是乙個簡單的方法,但不智慧型。
【官方解法】
1.迭代版本求解
初始化:定義cur指向新鍊錶的頭結點
操作:1.如果l1指向的結點值小於等於l2指向的結點值,則將l1指向的結點值鏈結到cur的next指標,然後l1指向下乙個結點值
2.否則,讓l2指向下乙個結點值
3.迴圈步驟1,2,直到l1或者l2為nullptr
4.將l1或者l2剩下的部分鏈結到cur的後面
技巧
一般建立單鏈表,都會設乙個虛擬頭結點,也叫哨兵,因為這樣每乙個結點都有乙個前驅結點。
/*
struct listnode
};*/
class
solution
else
cur = cur-
>next;
} cur-
>next = phead1 ? phead1 : phead2;
//判斷phead1是否有值,如果有則指向p1否則指向p2
return vhead-
>next;
//返回虛擬頭節點的next}}
;
對於這三行額外的解釋(前面欠下的章,現在解釋清楚了~~~):
return vhead-
>next;
//正確的結果是vhead的next中的結果
2.遞迴版本
class
solution
else}}
;
JZ16 合併兩個排序的列表
題目描述 輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,當然我們需要合成後的鍊錶滿足單調不減規則。題解 我們已知是兩個遞增的鍊錶,需要把他合併成乙個遞增的鍊錶。1 我們需要乙個結果鍊錶,表示最後合併後的鍊錶。2 遍歷兩個鍊錶,如果 cur1 cur2,那麼就說明 list1 的當前結點小於 li...
16 合併兩個排序的鍊錶
題目 輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,當然我們需要合成後的鍊錶滿足單調不減規則。思路 與歸併排序思路相同。用到了乙個小技巧,宣告頭節點時,不宣告為null,使資料域為0,返回時返回head.next,這樣在 不需要先給head賦值,比較簡潔。public class solutio...
16 合併兩個排序的鍊錶
輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,當然我們需要合成後的鍊錶滿足單調不減規則。總結 要建立乙個新的頭結點,如果直接在l1 l2 上修改,鍊錶就會被更改,還要涉及到儲存結點,會使得問題複雜化。建立新的頭結點之後,每次都向後挪動一位,並且插入l1 l2 中的小值,對應的鍊錶挪動一位。tip...