頭指針與頭結點以及首元結點的關係:html
問題分析前端
實現要點bash
一、設置指針t1遍歷L1,指針t2遍歷L2,指針Ptr指向合適的結點(在L1中的結點,或者L2中的結點)來構造新的鏈表L。數據結構
代碼實現方案一:建立一個新的鏈表用來存儲排列數據, 而後用while循環檢測l1和l2中的val
值,若是l1.var<=l2.var
,那麼就讓新鏈表的next
指針指向l1的val,
,而後改變l1
的指針指向而且將l1
的下一個值指向l1
,依次迭代,反之,若是l1.val>l2.var
那麼就讓新鏈表的next
指針指向l2
的val,
,而後改變l2
的指針指向而且將l2
的下一個值指向l2
,依次迭代,直到左右節點迭代完,判斷l1
是否爲空,返回新鏈表l3
.函數
<script>
function mergeTwoLists(l1, l2) {
var l3 = new ListNode(-1);
var c3 = l3;
while (l1 !== null && l2 !== null) {
if (l1.val <= l2.val) {
c3.next = l1;
l1 = l1.next;
} else {
c3.next = l2;
l2 = l2.next;
}
c3 = c3.next;
}
c3.next = (l1 === null) ? l2 : l1;
return l3.next;
}
// 自定義一個鏈表
function ListNode(val) {
this.val = val;
this.next = null;
}
</script>
複製代碼
實現方法二:遞歸學習
function mergeTwoLists(l1, l2) {
if (l1 = null && l2 == null) {
return null;
}
if (l1 == null) {
return l2;
}
if (l2 == null) {
return l1;
}
if (l1.val < l2.val) {
l1.next = mergeTwoLists(l1.next, l2);
return l1;
} else {
l2.next = mergeTwoLists(l1, l2.next);
return l2;
}
}
複製代碼
能夠複製以上代碼到leetcode-合併連個有序鏈表進行驗證。ui
歡迎小夥伴評論區提出更好的解決方案,記得點贊👍鼓勵下哦!this
參考連接:spa
鏈表基礎知識總結.net
掃一掃下面的二維碼,回覆學習便可免費領取最新前端學習資料,也但願在前端進階的路上,咱們一塊兒成長,一塊兒進步!