15_链表中倒数第k个节点

来源:互联网 发布:怎么监控数据库的变化 编辑:程序博客网 时间:2024/06/06 21:25

题目:输入一个链表,输出该链表中倒数第k个结点。
本题从1开始计数,即链表的尾结点是倒数第1个结点。
例如一个链表有6个结点,从头结点开始它们的值依次是1、2、3、4、5 、6。这个链表的倒数第 3 个结点是值为 4 的结点。

Java版:

import java.util.Scanner;class ListNode {    public int data;    public ListNode next;}public class Main {    //node:null    //输入:1 3 5 7    //链表:7 5 3 1 null    //查找倒数第k个其实就是产生的链表的正数第k个    public static ListNode findK(ListNode node, int k){        if(node.next == null || k <= 0){            System.out.println("Input Error!");            return null;        }        int start = 0;        while(node.next != null && start < k){            start++;            node = node.next;        }        return node;    }    public static void main(String[] args) {        System.out.print("请输入单链表的节点数:");        Scanner in = new Scanner(System.in);        while (in.hasNext()) {            ListNode node = new ListNode();            node.next = null;            int N = in.nextInt();//链表结点个数            if(N <= 0){                System.out.println("Input Error!");                return;            }            System.out.print("请输入链表(以空格隔开):");            for (int i = 0; i < N; i++) {                //把p节点插到node节点后面,所以产生的链表与输入的链表顺序相反                ListNode p = new ListNode();                p.data = in.nextInt();                p.next = node.next;                node.next = p;            }            System.out.print("请输入从后往前查询的位置k:");            int k = in.nextInt();//倒数第k个值            if(k > N){                System.out.println("Input Error!");                return;            }            ListNode kthNode = findK(node,k);            System.out.println("链表倒数第k个节点的值为:"+kthNode.data);        }        in.close();    }}
原创粉丝点击