首页 > 代码库 > 剑指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个结点