剑指offer-题目1517:链表中倒数第k个结点 (2013.12.29)

//后插的话需要多用一个标记指
#include <iostream>
#include <string>
#include <stdio.h>
using   namespace   std;
struct   Entry
{
     string m;
     Entry *next;
};
Entry *GetNewEntry(){
     string p;
     cin>>p;
     Entry *newOne= new   Entry;
     //if (p==EOF) return NULL;
     newOne->m=p;
     newOne->next=NULL;
     return   newOne;
}
Entry *BuildList( int   n)
{
     Entry *listHead=NULL;
     Entry *p=NULL;
     while   (n>0)
     {
         Entry *newOne=GetNewEntry();
         //if(newOne==NULL) break;
         //if (n==0) break;
         n--;
         if   (p==NULL)
         {
             p=newOne;
             listHead=p;
         } else {
             //newOne->next=p;
             //p->next=newOne;
             //p=p->next;
             p->next=newOne;
             p=p->next;
         }
         
     }
     return   listHead;
}
 
Entry *findk( int   k,Entry *listHead){
     Entry *p,*q;
     p=listHead;
     q=p;
     if (k==0)  return   NULL;
     while   (k>0)
     {
         q=q->next;
         k--;
         if   (k>0&&q==NULL&&p!=NULL)
         {
             return   NULL;
         }
     }
     while   (q!=NULL)
     {
         p=p->next;
         q=q->next;
     }
     return   p;
}
 
int   main()
{
     int   num,k;
     while   (cin>>num>>k)
     {
        Entry *list=BuildList(num);
        Entry *p=findk(k,list);
        if   (p!=NULL)
        {
            cout<<p->m<<endl;
        } else {
            cout<< "NULL" <<endl;
        }
     }
}
/**************************************************************
     Problem: 1517
     User: 无梦楼主lv
     Language: C++
     Result: Accepted
     Time:290 ms
     Memory:5480 kb
****************************************************************/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值