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