1. 程式人生 > 其它 >面試總結【MySQL】

面試總結【MySQL】

一、題目

 

二、題目分析

  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; };