方法一 双指针
1 /** 2 * Definition for singly-linked list. 3 * function ListNode(val) { 4 * this.val = val; 5 * this.next = null; 6 * } 7 */ 8 /** 9 * @param {ListNode} head 10 * @param {number} k 11 * @return {ListNode} 12 */ 13 var getKthFromEnd = function(head, k) { 14 //双指针,第一个指针先走k步 15 let slow = head, fast = head; 16 while(k && fast) { 17 k--; 18 fast = fast.next; 19 } 20 while(fast) { 21 slow = slow.next; 22 fast = fast.next; 23 } 24 return slow; 25 };
方法二 数组
1 /** 2 * Definition for singly-linked list. 3 * function ListNode(val) { 4 * this.val = val; 5 * this.next = null; 6 * } 7 */ 8 /** 9 * @param {ListNode} head 10 * @param {number} k 11 * @return {ListNode} 12 */ 13 var getKthFromEnd = function(head, k) { 14 let res = []; 15 while(head) { 16 res.push(head); 17 head = head.next; 18 } 19 return res[res.length - k]; 20 };