您的位置:首页 > Web前端

剑指offer 输出链表倒数第k个结点

2017-11-30 20:30 351 查看
输入一个链表,输出该链表中倒数第k个结点。

想法一:遍历两次链表,第一次记录总结点数,第二次找到倒数第k个结点的位置

想法二:使用两个指针,如果两个指针相距k-1,同时移动,当后指针移动到尾结点,前指针即倒数第k个结点

#include<cstdio>
#include<iostream>
#include<cstdlib>
using namespace std;
typedef struct listnode{
int value;
listnode *next;

}listnode;
listnode*findkth(listnode*phead,int k)
{
if(phead==NULL||k<1)
return NULL;
listnode *first=phead;
listnode *last=phead;
for(int i=0;i<k-1;i++)
{
if(last->next!=NULL)
last=last->next;
else
return NULL;
}
while(last->next!=NULL)
{
first=first->next;
last=last->next;
}
return first;
}
int main()
{
listnode* a=(listnode*)malloc(sizeof(listnode));
a->value=10;
a->next=NULL;
listnode*a1=a;
for(int i=10;i<15;i++)
{
listnode *b=(listnode*)malloc(sizeof(listnode));
b->value=i*2;
b->next=NULL;
a1->next=b;
a1=b;
}
a1=a;
while(a1!=NULL)
{
cout<<a1->value<<" ";
a1=a1->next;
}
cout<<endl;
listnode* k=findkth(a,3);
cout<<k->value<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: