输入一个单向链表,输出该链表中倒数第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
两种方法
1、头插法输入12345678,列表中存的是head->8 7 6 5 4 3 2 1->null
#include <iostream>
#define null 0
using namespace std;
typedef struct node
{
int data;
struct node *pnext;
}node,*linkedlist;
int main(void)
{
int val;
int n;
linkedlist phead=(linkedlist)malloc(sizeof(struct node));
linkedlist r=(linkedlist)malloc(sizeof(struct node));
linkedlist p;
//r=phead;
r->pnext=NULL;
cin>>n;
for(int i=0;i<n;i++)
{
p=(linkedlist)malloc(sizeof(struct node));
cin>>val;
p->data=val;
p->pnext=r;
r=p;
}
phead->pnext=p;
int k;
cin>>k;
linkedlist s=phead;
for(int i=0;i<k+1;i++)
{
s=s->pnext;
val=s->data;
//cout<<val;
}
cout<<val;
return 0;
}
2、尾插法输入12345678,列表中存的是 head->1 2 3 4 5 6 7 8 -> null
#include <iostream>
#define null 0
using namespace std;
typedef struct node
{
int data;
struct node *pnext;
}node,*linkedlist;
int main(void)
{
int val;
int n;
linkedlist phead=(linkedlist)malloc(sizeof(struct node));
linkedlist r;
linkedlist p;
r=phead;
r->pnext=NULL;
cin>>n;
for(int i=0;i<n;i++)
{
p=(linkedlist)malloc(sizeof(struct node));
cin>>val;
p->data=val;
r->pnext=p;
r=p;
}
int k;
cin>>k;
linkedlist s=phead;
for(int i=0;i<n-k;i++)
{
s=s->pnext;
val=s->data;
}
cout<<val;
return 0;
}