首页 > 其他 > 详细

链表中倒数第K个结点

时间:2014-06-09 16:36:13      阅读:442      评论:0      收藏:0      [点我收藏+]

题目:输入一个链表,输出改链表倒数第K个结点。

分析:常规方法可能就是,先遍历一遍链表,找到链表长度length,那么我们只需要第二次遍历length-k+1个结点就可以找到倒数第k个结点。

        比较好的方法是采用两个指针,让一个指针先走K-1步,后面的指针再跟上。这样只需要遍历一遍。

注意:1.提高容错性,在链表为空 或者k为空。还有k大于链表长度。

        2.链表下一个结点,我们采用p=p->next.指针指向的数组我们采用p++;

bubuko.com,布布扣
typedef int Type;
struct listNode{
    Type data;
    listNode *nextNode;
};

listNode* findInverOfK(listNode * pHead,int k)
{
   
   //还有其他各种情况的考察,容错性检查
   //链表递增到下一个结点:p=p->next,如果是指针指向一个数组,则用p++;
   if(NULL==pHead||k<=0)
        return NULL;                 //注意出错就返回NULL
  
       listNode *p_first=pHead;
       listNode *p_second=pHead;
       for (int i=0;i<k-1;i++)        //注意是k-1
       {
           if(p_second->nextNode!=NULL)
               p_second=p_second->nextNode;
           else
               return NULL;
       }
       while(p_second->nextNode!=NULL)
       {
           p_first=p_first->nextNode;  //注意不是p_first++;除非指向的是一个数组
           p_second=p_second->nextNode;
       }
       return p_first;
   
}
bubuko.com,布布扣

 

链表中倒数第K个结点,布布扣,bubuko.com

链表中倒数第K个结点

原文:http://www.cnblogs.com/menghuizuotian/p/3777663.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!