输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。
例如,一个链表有
6
个节点,从头节点开始,它们的值依次是1、2、3、4、5、6
。这个链表的倒数第3
个节点是值为4
的节点。给定一个链表: 1->2->3->4->5, 和 k = 2. 返回链表 4->5.
今天我们来说一说面试中链表的相关问题,该题虽然简单,但是确实是面试中经常出现的,链表的问题用指针问题肯定可以解决,如果解决不了,那就多声明几个指针,肯定手到擒来,链表问题无非就是这些节点中的指针域互相指来指去,现在,我们来上干货!!!
现在假如让你去找倒数第k个节点的位置,你会怎么找?
链表只支持正序进行访问,因为它不是一个双向链表,有些人可能会说我可以从后面数第k个就是我们所需要找的节点
在不支持从后往前的时候,我们怎么才能快速的找到倒数第k个节点呢?
可能这幅图还是不能看的很清楚,看下图:
所以本题的大概思路就已经讲清楚了,上代码:
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<k;i++){
fast=fast=fast.next;
}
while(fast!=null){
slow=slow.next;
fast=fast.next;
}
return slow;
}