题目描述:
输入一个单向链表,输出该链表中倒数第k个结点
输入、输出描述:
输入说明:1、链表结点个数 2、链表结点的值3、输入k的值
输出说明:第k个结点指针
题目分析:
假设链表长度为n,倒数第k个结点=正序第n-k+1个结点,所以题目的实质可以看作是链表的遍历。
首先输入链表结点个数n与各个结点取值构建链表并返回链表的头指针;
其次,输入k,调用链表遍历函数,找到第n-k+1个结点。
主函数:
1 import java.util.Scanner;
2
3 public static void main(String[]args){
4
5 Scanner scan=new Scanner(System.in);
6
7 int n=scan.nextInt();
8
9 scan.nextLine();
10
11 String[] array=scan.nextLine().split(" ");
12
13 ListNode pHead=new ListNode(Integer.parseInt(array[0])); //输入的第一个元素作为头结点
14
15 ListNode walkNode=pHead;
16
17 for(int i=1;i<array.length;i++){ //创建链表
18
19 ListNode newNode=new ListNode(Integer.parseInt(array[i]));
20
21 walkNode.next=newNode;
22
23 walkNode=newNode;
24
25 }
26
27 int k=scan.nextInt();
28
29 System.out.print(FindKthToTail(pHead,n,k).val); //调用函数进行遍历
30
31 }
遍历函数:
1 public static ListNode FindKthToTail(ListNode pHead,int n, int k){
2
3 int index=n-k+1;
4
5 int count=1;
6
7 ListNode walkNode=pHead;
8
9 while(walkNode!=null&&count<index){
10
11 count++;
12
13 walkNode=walkNode.next;
14
15 }
16
17 return walkNode;
18
19 }