社区
数据结构与算法
帖子详情
找出单向链表的中项,如果有2个,输出前面一个
superspring
2009-12-03 02:15:33
比如
a->b->c->d->e 返回 c
a->b->c->d 返回 b
很显而意见的办法是遍历链表,先求出链表长度,然后再找出根据中间项的位置
这样做的复杂度 是 链表长度的1.5倍
有没有更好的办法
...全文
237
9
打赏
收藏
找出单向链表的中项,如果有2个,输出前面一个
比如 a->b->c->d->e 返回 c a->b->c->d 返回 b 很显而意见的办法是遍历链表,先求出链表长度,然后再找出根据中间项的位置 这样做的复杂度 是 链表长度的1.5倍 有没有更好的办法
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
bigc2000
2009-12-06
打赏
举报
回复
复杂度都是O(n),至于比较次数倒是采用一个走2步,1个走1步
好于数组
lpwcstr
2009-12-05
打赏
举报
回复
typedef struct tag__LinkNode
{
int value;
struct tag__LinkNode * pNext;
}LINKNODE, * PLINKNODE;
PLINKNODE GetMid(PLINKNODE head)
{
PLINKNODE pRet = head;
int i = 0;
PLINKNODE pTmp = head;
while(pTmp)
{
if( i > 0 && !(i % 2))
pRet = pRet->pNext;
pTmp = pTmp->pNext;
i ++;
}
return pRet;
}
alexhilton
2009-12-03
打赏
举报
回复
用二个指针, 一个一次前进一个节点, 一个一次前进二个节点, 当第二个指针到达尾部时, 第一个指钱刚好达到链表中项。
LeonTown
2009-12-03
打赏
举报
回复
cool
[Quote=引用 4 楼 zhoushunda960 的回复:]
设A、B两个指针指向链表,两个指针同时遍历链表,A指针一次跳一步,B指针一次跳两步。B到尾时,A应该就是中间项吧!
[/Quote]
kolapig
2009-12-03
打赏
举报
回复
[Quote=引用 4 楼 zhoushunda960 的回复:]
设A、B两个指针指向链表,两个指针同时遍历链表,A指针一次跳一步,B指针一次跳两步。B到尾时,A应该就是中间项吧!
[/Quote]
这样做的时间复杂度跟楼组的办法是一样的吧。
zhoushunda960
2009-12-03
打赏
举报
回复
设A、B两个指针指向链表,两个指针同时遍历链表,A指针一次跳一步,B指针一次跳两步。B到尾时,A应该就是中间项吧!
superspring
2009-12-03
打赏
举报
回复
[Quote=引用 2 楼 meihuakai 的回复:]
在链表生成的时候就给它的么讴歌结点一个数据域,用来记录该结点在链表中的位置,int i=0;i++自动给该数据域赋值,链表生成好后总的结点个数就是最后一个接点的数据,这样直接找
[/Quote]
是单向链表啊,你就算给了一个数据记录节点在链表中位置,也没有一点用处
meihuakai
2009-12-03
打赏
举报
回复
在链表生成的时候就给它的么讴歌结点一个数据域,用来记录该结点在链表中的位置,int i=0;i++自动给该数据域赋值,链表生成好后总的结点个数就是最后一个接点的数据,这样直接找
donkey301
2009-12-03
打赏
举报
回复
可不可以加个记录链表长度的变量,每加一个节点就更新一次。
数据结构与算法
33,028
社区成员
35,337
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章