输出单项链表中倒数第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     }
View Code

 

posted @ 2018-07-19 18:06  蓝天白云。  阅读(651)  评论(0编辑  收藏  举报