掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
經(jīng)過前面的學(xué)習(xí),我們知道了有關(guān)鏈表的操作可以用指針來(lái)完成。同樣的,這個(gè)問題也可以用雙指針的思路來(lái)實(shí)現(xiàn):

創(chuàng)新互聯(lián)是一家專業(yè)提供高明企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計(jì)、做網(wǎng)站、html5、小程序制作等業(yè)務(wù)。10年已為高明眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站制作公司優(yōu)惠進(jìn)行中。
聲明一個(gè)變量存儲(chǔ)合并后的鏈表,比對(duì)兩個(gè)指針指向的節(jié)點(diǎn)值大?。?/p>
看完上述分析后,聰明的開發(fā)者已經(jīng)想到代碼怎么寫了。沒錯(cuò),這就是典型的遞歸思路,代碼如下:
pMergedHead的值就為鏈表2的節(jié)點(diǎn)值。
pMergedHead的下一個(gè)節(jié)點(diǎn)值就為鏈表1的下一個(gè)節(jié)點(diǎn)和鏈表2的節(jié)點(diǎn)值比對(duì)后的值(遞歸)。
pMergedHead的值就為鏈表1的節(jié)點(diǎn)值。
pMergedHead的下一個(gè)節(jié)點(diǎn)值就為鏈表2的下一個(gè)節(jié)點(diǎn)和鏈表1的節(jié)點(diǎn)值比對(duì)后的值(遞歸)。
export function MergeLinkedList(
firstListHead: ListNode | null,
secondListHead: ListNode | null
): ListNode | null {
// 基線條件
if (firstListHead == null) {
return secondListHead;
}
if (secondListHead == null) {
return firstListHead;
}
let pMergedHead: ListNode | null = null;
if (firstListHead.element < secondListHead.element) {
pMergedHead = firstListHead;
pMergedHead.next = MergeLinkedList(firstListHead.next, secondListHead);
} else {
pMergedHead = secondListHead;
pMergedHead.next = MergeLinkedList(firstListHead, secondListHead.next);
}
return pMergedHead;
}
接下來(lái),我們用思路分析章節(jié)中的例子來(lái)測(cè)試下我們的代碼能否正常執(zhí)行。
const firstLinkedList = new LinkedList();
firstLinkedList.push(1);
firstLinkedList.push(3);
firstLinkedList.push(5);
firstLinkedList.push(7);
firstLinkedList.push(9);
const secondLinkedList = new LinkedList();
secondLinkedList.push(2);
secondLinkedList.push(4);
secondLinkedList.push(6);
secondLinkedList.push(8);
const resultListHead = MergeLinkedList(
firstLinkedList.getHead(),
secondLinkedList.getHead()
);
console.log(resultListHead);
本文所列舉的代碼,其完整版請(qǐng)移步:

我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流