码迷,mamicode.com
首页 > 其他好文 > 详细

链表中倒数第K个结点

时间:2014-06-09 16:35:50      阅读:396      评论:0      收藏:0      [点我收藏+]

标签:c   style   class   blog   code   java   

题目:输入一个链表,输出改链表倒数第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个结点

标签:c   style   class   blog   code   java   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!