題目詳情:
輸入一個(ge)鏈(lian)表(biao),輸出該鏈(lian)表(biao)中倒(dao)數第k個(ge)結點(dian)。
示例:
輸入:1,{1,2,3,4,5}
輸出:{5}
解題思路:
首先定義鏈表的數據結構,可以使用對象表示節點,包含一個值和下一個節點的引用。
創(chuang)建一個(ge)(ge)函數(shu)(shu) findKthFromEnd,接收(shou)一個(ge)(ge)鏈(lian)表(biao)頭節點(dian)和整數(shu)(shu) k 作為參數(shu)(shu)。在函數(shu)(shu)內部(bu),使用雙指(zhi)針法來查(cha)找倒數(shu)(shu)第 k 個(ge)(ge)節點(dian)。
代碼實現:
class ListNode {
constructor(val, next = null) {
this.val = val;
this.next = next;
}
}
function findKthFromEnd(head, k) {
let slow = head;
let fast = head;
// 快指針先移動 k 步
for (let i = 0; i < k; i++) {
if (fast === null) {
return null; // 如果鏈表長度小于 k,返回 null
}
fast = fast.next;
}
// 快慢指針一起移動,直到快指針到達鏈表尾部
while (fast !== null) {
slow = slow.next;
fast = fast.next;
}
return slow; // 返回倒數第 k 個節點
}
// 構造鏈表:1 -> 2 -> 3 -> 4 -> 5
const head = new ListNode(1);
head.next = new ListNode(2);
head.next.next = new ListNode(3);
head.next.next.next = new ListNode(4);
head.next.next.next.next = new ListNode(5);
const k = 3; // 倒數第 k 個節點的位置
const result = findKthFromEnd(head, k); // 輸出 3
// 輸出倒數第 k 個節點
if (result !== null) {
console.log(result.val);
} else {
console.log("鏈表長度小于 k");
}