面试题22:链表中倒数第k个节点
题目:输入一个链表,输出该链表中倒数第k个结点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个结点。
例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6,这个链表的倒数第3个节点是值为4的节点。
思路:
1. 使用一个指针moveNode先挪动k步,再使用locNode同步移动,直到moveNode为null,此时locNode指向的是倒数第k个节点(书中用的k-1步,可将判断条件改为moveNode.next=null 相同)
2. 注意:
① 输入k的大小 题中定义k为k≥1,如果k=0,则无效,若k>链表长度,也无效(此判断在②中进行)
② 链表长度 i.链表为空,则不存在倒数第k个节点;ii.链表小于k,则在moveNode挪动时应检查出,并给出相应提示处理
public class Q22 {
public static void main(String[] args) {
System.out.print("input your link:\n");
ListNode head = getLink();
showLink(head);
int k=0;
System.out.print("input your k:");
Scanner sc = new Scanner(System.in);
if(sc.hasNextInt()) {
k = sc.nex