双指针从广义上来说,是指用两个变量在线性结构上遍历而解决的问题。狭义上说,

    • 对于数组,指两个变量在数组上相向移动解决的问题;
    • 对于链表,指两个变量在链表上同向移动解决的问题,也称为「快慢指针」问题。
      1. // 输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,
      2. // 即链表的尾节点是倒数第1个节点
      3. var getKthFromEnd = function(head, k) {
      4. let [fast, slow] = [head, head]
      5. while (fast && k>0) { // 快指针先走k步
      6. [fast, k] = [fast.next, k-1]
      7. }
      8. while (fast) { // 快慢指针同时走,快指针走完时,慢指针刚好走了n-k步
      9. [fast, slow] = [fast.next, slow.next]
      10. }
      11. return slow
      12. };