华为OJ训练之0008-161230-输出链表倒数第k个数字

来源:互联网 发布:中国象棋软件哪个好使 编辑:程序博客网 时间:2024/06/04 18:08

题目

输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第0个结点为链表的尾指针。
链表结点定义如下:
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};
详细描述:
接口说明
原型:
ListNode* FindKthToTail(ListNode* pListHead, unsignedint k);
输入参数:
ListNode* pListHead 单向链表
unsigned int k 倒数第k个结点
输出参数(指针指向的内存区域保证有效):

返回值:
正常返回倒数第k个结点指针,异常返回空指针

知识点 链表,查找,指针
运行时间限制 10M
内存限制 128
输入
输入说明
1 输入链表结点个数
2 输入链表的值
3 输入k的值
输出
输出一个整数
样例输入 8 1 2 3 4 5 6 7 8 4
样例输出 4

第一次 答案错误 经检查发现没有认真读题 搞错了输入
第二次 正确 得分98分

=============================================================

import java.util.Scanner;//输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第0个结点为链表的尾指针。//链表结点定义如下://struct ListNode//{//      int       m_nKey;//      ListNode* m_pNext;//};//详细描述://接口说明//原型://ListNode* FindKthToTail(ListNode* pListHead, unsignedint k);//输入参数://        ListNode* pListHead  单向链表//     unsigned int k  倒数第k个结点//输出参数(指针指向的内存区域保证有效)://    无//返回值://        正常返回倒数第k个结点指针,异常返回空指针// // //知识点   链表,查找,指针//运行时间限制    10M//内存限制  128//输入    //输入说明//1 输入链表结点个数//2 输入链表的值//3 输入k的值//输出    //输出一个整数//样例输入  8 1 2 3 4 5 6 7 8 4//样例输出  4class node{int key;node next=null;//ListNode* FindKthToTail(ListNode* pListHead, unsignedint k);//输入参数://        ListNode* pListHead  单向链表//     unsigned int k  倒数第k个结点public node findKthToTail(node head,int k){    node kNode =null;    int n=getLength(head)-k;    if(n>=0&&n<getLength(head))    {        kNode=getNthNode(head, n);    }    return kNode;}//获取正数第n个数字public node getNthNode(node head,int n){node NNode =head;for(int i=1;i<n;i++){NNode=NNode.next;   }return NNode;}//获取总长度public int getLength(node head){int count=0;node p=head;while(p!=null){count++;p=p.next;}return --count;    //扣除尾指针}}public class oj008 {    public static void main(String[] args) {        Scanner scanner=new Scanner(System.in);        int n=scanner.nextInt();        node head=new node();        node p=head;        for(int i=0;i<n;i++)        {            p.key=scanner.nextInt();            p.next=new node();            p=p.next;        }        int k=scanner.nextInt();        node knode=head.findKthToTail(head, k);        if(knode!=null)        {System.out.print(knode.key);}    }}
0 0
原创粉丝点击