登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

张继飞的博客

呜呼哀哉

 
 
 

日志

 
 

腾讯的一道链表笔试题【总结】  

2010-04-15 09:47:00|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

出题的大致函数声明:
node fun(node * head, int index),要我们实现函数里面的方法。
其中node是一个单向链表。
要实现的功能:返回倒数的第index个节点。
怎样优化,看大家各自发挥~

 

对于这个问题属于常见的问题了
一般设置两个指针p1,p2
首先p1和p2都指向head
然后p2向前走n步,这样p1和p2之间就间隔n个节点
然后p1和p2同时向前步进,当p2到达最后一个节点时,p1就是倒数第n个节点了

下面给出个例子来进一步说明

node fun(node * head, int index)
{
    node
*ptr1,*ptr2;
   
int i = 0;
    ptr1
= head;
    ptr2
= head;
   
if( head == NULL || head->next == NULL )
       
return ptr1;
   
   
while(i<index)   //保证向后移动index个位置
    {
        ptr1
= ptr1->next;
       
if(ptr1 == NULL)
           
return head;
        i
++;
    }

   
while(ptr1->next != NULL)
    {
        ptr1
= ptr1->next;
        ptr2
= ptr2->next;
    }

   
return *ptr2;
}

 

除了上面的方法,还有另外的方法,

一、整个static count 第一次遍历时求出 链的总长,第二次开始直接步进count-index

缺点:进行了两遍遍历。

二、将链表倒置。其实也不是很好。

  评论这张
 
阅读(1232)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018