面试热题(倒数第k个结点)

输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。

例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。

给定一个链表: 1->2->3->4->5, 和 k = 2.

返回链表 4->5.

       今天我们来说一说面试中链表的相关问题,该题虽然简单,但是确实是面试中经常出现的,链表的问题用指针问题肯定可以解决,如果解决不了,那就多声明几个指针,肯定手到擒来,链表问题无非就是这些节点中的指针域互相指来指去,现在,我们来上干货!!!

面试热题(倒数第k个结点)_第1张图片

 现在假如让你去找倒数第k个节点的位置,你会怎么找?

     链表只支持正序进行访问,因为它不是一个双向链表,有些人可能会说我可以从后面数第k个就是我们所需要找的节点面试热题(倒数第k个结点)_第2张图片

 在不支持从后往前的时候,我们怎么才能快速的找到倒数第k个节点呢?

面试热题(倒数第k个结点)_第3张图片

 可能这幅图还是不能看的很清楚,看下图:

面试热题(倒数第k个结点)_第4张图片

 所以本题的大概思路就已经讲清楚了,上代码:

  public ListNode getKthFromEnd(ListNode head, int k) {
             if(head==null||k<0){
                      return null;
            }
          ListNode fast=head;
          ListNode slow=head;
          for(int i=0;i

你可能感兴趣的:(热题Hot100,面试,java,算法)