目录
前言
本人刷剑指offer的一些程序记录,头文件,主函数都齐全,可直接上机运行
一、题目
输⼊⼀个链表,输出该链表中倒数第k个结点。
二、程序
1.方法一:
用<list>,使用end()函数,通过迭代器从后往前找
#include <iostream>
#include <list>
using namespace std;
class solution
{
public:
int list_k(int k,list<int> list_int)
{
list<int>::iterator itor=list_int.end();
for(int i=0;i<k;i++) --itor;
return *itor;
}
};
int main()
{
list<int> list_int;
int n,arr;
cout<<"请输入链表的长度:";
cin>>n;
cout<<"初始化链表:";
for(int i=0;i<n;i++)
{
cin>>arr;
list_int.push_back(arr);
}
cout<<"请输入k"<<endl;
int k;
cin>>k;
cout<<"链表中倒数第"<<k<<"个结点的值为:"<<endl;
solution stu;
cout<<stu.list_k(k,list_int)<<endl;
}
2.方法二:
运用两指针对应寻找
#include <iostream>
using namespace std;
typedef struct LineList
{
int val;
LineList *next;
}*linelist;
class solution
{
public:
int List_k(int k,linelist NodeList)
{
linelist list_A,list_B;
list_A=NodeList->next;
list_B=NodeList->next;
for(int i=1;i<k;i++)
{
list_B=list_B->next;
}
while(list_B->next)
{
list_A=list_A->next;
list_B=list_B->next;
}
return list_A->val;
}
};
int main()
{
linelist NodeList,q,p;
NodeList=new LineList;
p=NodeList;
p->next=NULL;
int n,arr;
cout<<"请输入链表的长度:";
cin>>n;
cout<<"初始化链表:";
for(int i=0;i<n;i++)
{
cin>>arr;
q=new LineList;
q->val=arr;
q->next=p->next;
p->next=q;
p=q;
}
cout<<"请输入k"<<endl;
int k;
cin>>k;
if(k>n)
{
cout<<"ERROR";
return 0;
}
cout<<"链表中倒数第"<<k<<"个结点的值为:"<<endl;
solution stu;
cout<<stu.List_k(k,NodeList)<<endl;
}