题目
输入一个单向链表,输出该链表中倒数第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
//样例输出 4
class 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);}
}
}