输出单项链表中倒数第k个结点——牛客刷题

题目描述:

输入一个单向链表,输出该链表中倒数第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 }

猜你喜欢

转载自www.cnblogs.com/darlinFly/p/9337359.html