zoukankan      html  css  js  c++  java
  • 输出单项链表中倒数第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
  • 相关阅读:
    Ubuntu14.04+cuda 7.5+cudnn_v4+tensorflow安装
    error C2275: “XXX”: 将此类型用作表达式非法
    DLL调试方法
    OpenCV ——双线性插值(Bilinear interpolation)
    OpenCV ——背景建模之CodeBook(2)
    OpenCV ——背景建模之CodeBook(1)
    OpenCV——GMM混合高斯模型
    OpenCV——运用于pixels war游戏
    【SpringSecurityOAuth2】源码分析@EnableOAuth2Sso在Spring Security OAuth2 SSO单点登录场景下的作用
    【Spring】简述@Configuration配置类注册BeanDefinition到Spring容器的过程
  • 原文地址:https://www.cnblogs.com/darlinFly/p/9337359.html
Copyright © 2011-2022 走看看