面試總結【MySQL】
阿新 • • 發佈:2022-03-09
一、題目
二、題目分析
1.第一種解法:遍歷兩次,第一次遍歷求出連結串列長度,第二次遍歷找到k 個節點,為什麼要怎麼做:本題中的連結串列是單向連結串列,單向連結串列的節點只有從前往後的指標而沒有從後往前的指標;假設整個連結串列有n個節點,那麼倒數第K個節點就是從頭節點開始的第n-k個節點。
2.第二解法:雙指標解法;快慢指標,fast的指標要先走k+1,slow的指標要再head的位置上,此時fast - slow = k ;所以兩個指標分別都向連結串列後面走,當fast指向為空的時候,slow的位置就在k上,如何去實現?先讓fast slow都在head上,然後讓fast先走k+1的節點
三、程式碼
/** * Definition for singly-linked list. * function ListNode(val) { * this.val = val; * this.next = null; * } */ /** * @param {ListNode} head * @param {number} k * @return {ListNode} */ var getKthFromEnd = function(head, k) { let p = head; let sum =0; //計算連結串列長度 while(p){ p = p.next; sum ++; } p = head; for(let i = 0; i < sum-k; i++){ p = p.next; } return p; };
/** * Definition for singly-linked list. * function ListNode(val) { * this.val = val; * this.next = null; * } */ /** * @param {ListNode} head * @param {number} k * @return {ListNode}*/ var getKthFromEnd = function(head, k) { let fast = head, slow = head; while(fast && k){ fast = fast.next; k--; } while(fast){ fast = fast.next; slow = slow.next; } return slow; };