首页 > 代码库 > 剑指OFFER之链表中倒数第k个结点
剑指OFFER之链表中倒数第k个结点
- 题目描述:
输入一个链表,输出该链表中倒数第k个结点。
(hint: 请务必使用链表。)
- 输入:
输入可能包含多个测试样例,输入以EOF结束。
对于每个测试案例,输入的第一行为两个整数n和k(0<=n<=1000, 0<=k<=1000):n代表将要输入的链表元素的个数,k代表要查询倒数第几个的元素。
输入的第二行包括n个数t(1<=t<=1000000):代表链表中的元素。
- 输出:
对应每个测试案例,
若有结果,输出相应的查找结果。否则,输出NULL。
- 样例输入:
5 21 2 3 4 51 05
- 样例输出:
4NULL
Code:#include <iostream> using namespace std; struct Node{ int data; Node *next;}; /*思想:设置2个指针L_head和L_behind,初始化时都指向头结点的后一个结点(L->next),令L_head先走k-1步,L_head和L_behind再一起向后遍历,当L_head到了最后一个结点的时候,L_behind此时就指向倒数第k个结点*/int main(){ int n,k; while(cin>>n>>k){ Node *L=new Node; L->next=NULL; Node *pre=L; Node *L_head,*L_behind; int cnt; for(int i=0;i<n;i++){ Node *p=new Node; p->next=NULL; int x; cin>>x; p->data=http://www.mamicode.com/x; pre->next=p; pre=p; } if(k==0||k>n){ cout<<"NULL"<<endl; continue; } L_head=L_behind=L->next; cnt=1; while(cnt<=k){ L_head=L_head->next; ++cnt; } while(L_head!=NULL){ L_head=L_head->next; L_behind=L_behind->next; } cout<<L_behind->data<<endl; } return 0;} /************************************************************** Problem: 1517 User: lcyvino Language: C++ Result: Accepted Time:200 ms Memory:3104 kb****************************************************************/
剑指OFFER之链表中倒数第k个结点
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。