| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2082 人关注过本帖
标题:讨论一道微软面试题
只看楼主 加入收藏
unicorn
Rank: 4
等 级:贵宾
威 望:14
帖 子:1066
专家分:0
注 册:2005-10-25
收藏
 问题点数:0 回复次数:18 
讨论一道微软面试题
RT
给出两个单向链表的头指针,比如h1、h2,判断链表是否相交,如果不相交返回NULL;
如果相交,返回指向第一个相交节点的指针。要求:时间复杂度控制在O(n)


-----------------------------------------------------------------------
讨论一下方法...
搜索更多相关主题的帖子: 微软 面试 讨论 
2006-10-23 16:20
wangxiang
Rank: 2
等 级:新手上路
威 望:5
帖 子:376
专家分:0
注 册:2006-3-28
收藏
得分:0 
ChainNode* Find(ChainNode* h1,ChainNode* h2)
{
ChainNode *p1 = h1;
ChainNode *p2 = h2;
for(;p1 && p2;p1 = p1->link,p2 = p2->link)
if(p1==p2)
return p1;
return NULL;
}
是不是错了,感觉不可能这么简单

[此贴子已经被作者于2006-10-23 17:11:25编辑过]


2006-10-23 17:10
unicorn
Rank: 4
等 级:贵宾
威 望:14
帖 子:1066
专家分:0
注 册:2005-10-25
收藏
得分:0 

你的可以判断相交的节点..但是同时比较同一位置的节点吖
h1:a->b->c
h2:c->a->b //这样的就没交点了?
你的不如改进下呢,把连个链表连成环,然后用个临时指针来判断每个节点,是否有p1==p2的时候...不过这时间复杂度是好像得是O(n^2)
...再想想


unicorn-h.spaces. ◇◆ sava-scratch.spaces.  noh enol ! pue pu!w hw u! shemle aq ll!m noh 
2006-10-23 18:31
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
得分:0 
借下LS的程序:
ChainNode* Find(ChainNode* h1)
{
ChainNode *p1 = h1;
ChainNode *p2 = h1;
while (p1->next!=NULL)
{
p2=p1;
p1=p1->next;
if (p2->next->next!=p1->next)
return p1;
}
return NULL;
}
我的想法是:
只要遍历一个链表,如果这个结点相交的话,则它的next则不是同一个结点,而有两个.


2006-10-23 18:47
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
得分:0 
以下是引用unicorn在2006-10-23 18:31:20的发言:

你的可以判断相交的节点..但是同时比较同一位置的节点吖
h1:a->b->c
h2:c->a->b //这样的就没交点了?
你的不如改进下呢,把连个链表连成环,然后用个临时指针来判断每个节点,是否有p1==p2的时候...不过这时间复杂度是好像得是O(n^2)
...再想想

环状也考虑过,就是时间复杂度高了


2006-10-23 18:48
wangxiang
Rank: 2
等 级:新手上路
威 望:5
帖 子:376
专家分:0
注 册:2006-3-28
收藏
得分:0 
以下是引用unicorn在2006-10-23 18:31:20的发言:

你的可以判断相交的节点..但是同时比较同一位置的节点吖

什么是相交的结点,举个例子.
(我以为是同一位置的结点就就相交的结点)


2006-10-23 20:20
wangxiang
Rank: 2
等 级:新手上路
威 望:5
帖 子:376
专家分:0
注 册:2006-3-28
收藏
得分:0 

p1->data == p2->data;
p1->link == p2->link;
就叫相交的结点,对吗?


2006-10-23 20:23
unicorn
Rank: 4
等 级:贵宾
威 望:14
帖 子:1066
专家分:0
注 册:2005-10-25
收藏
得分:0 
什么是相交的结点

某两个节点的Next指针指向相同的地方

unicorn-h.spaces. ◇◆ sava-scratch.spaces.  noh enol ! pue pu!w hw u! shemle aq ll!m noh 
2006-10-23 20:44
wangxiang
Rank: 2
等 级:新手上路
威 望:5
帖 子:376
专家分:0
注 册:2006-3-28
收藏
得分:0 
for(;p1 && p2;p1 = p1->link,p2 = p2->link)
if((p1->link != NULL) &&(p2->link !=NULL)&&(p1->link==p2->link))//两个节点的Next指针指向相同的地方
return p1->link;

这样不就行了吗

[此贴子已经被作者于2006-10-23 20:52:48编辑过]


2006-10-23 20:50
unicorn
Rank: 4
等 级:贵宾
威 望:14
帖 子:1066
专家分:0
注 册:2005-10-25
收藏
得分:0 
"某两个节点"...
意思实说两个链表中"任意"两个节点指向同一个空间...比较的节点是不同位置也可以是相同的位置
你用一个for循环只能让两个链表的指针同时变化,不能达到任意节点之间的比较的

unicorn-h.spaces. ◇◆ sava-scratch.spaces.  noh enol ! pue pu!w hw u! shemle aq ll!m noh 
2006-10-23 21:00
快速回复:讨论一道微软面试题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018121 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved