| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3773 人关注过本帖
标题:链表逆置,有没有更容易理解的算法。
只看楼主 加入收藏
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
 问题点数:0 回复次数:36 
链表逆置,有没有更容易理解的算法。

我觉得这个算法还不错,就是有点难理解,大家有没有更容易理解的算法啊!
ReverseList(struct LNode *head)

{

struct LNode *p=head;

struct LNode *q=head;

struct LNode *s=head;

while (p->next)
p=p->next;

while ( s->next!=p )

{

q=s->next;

s->next=q->next;

q->next=p->next;

p->next=q;
}

}

搜索更多相关主题的帖子: 链表 next 算法 head LNode 
2006-07-22 16:19
穆扬
Rank: 1
等 级:禁止发言
帖 子:1910
专家分:0
注 册:2006-6-1
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽

2006-07-22 17:42
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
得分:0 
以下是引用穆扬在2006-7-22 17:42:15的发言:

这个可以吗?
没有返回值
而且形参的类型是struct LNode *

可能吗?


可以啊,在WIN-TC下可以,至于形参的类型是struct LNode *,只是在结构体定义中少写了typedef而已。您有更易懂的算法吗?


2006-07-22 18:08
穆扬
Rank: 1
等 级:禁止发言
帖 子:1910
专家分:0
注 册:2006-6-1
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽

2006-07-22 18:16
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
收藏
得分:0 
template<typename Name1>
void slist<Name1>::reverse()
{
strlist<Name1> *ptr=_front,*prev=0;

_front=_end;
_end=ptr;

while(ptr!=_front){
strlist<Name1> *tem=ptr->next();
ptr->next(prev);
prev=ptr;
ptr=tem;
}
_front->next(prev);
}

这是昨天拿C++写的一个链表逆转的类
_front是头指针 _end是尾指针
ptr->next(prev) 看成 ptr->next=prev;就可以了

PS:他写的是带表头结点的链表吧..我没细看,应该是吧

[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-07-22 18:22
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
得分:0 
以下是引用穆扬在2006-7-22 18:16:19的发言:

我看不可能
理由是,链表的head没有改变,何谈逆置?


您运行一下不就可以了吗,如果没环境的话,可以参考http://www.bc-cn.net/bbs/dispbbs.asp?BoardID=179&ID=69113&star=100##


2006-07-22 18:24
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
得分:0 
以下是引用SunShining在2006-7-22 18:22:26的发言:
template<typename Name1>
void slist<Name1>::reverse()
{
strlist<Name1> *ptr=_front,*prev=0;

_front=_end;
_end=ptr;

while(ptr!=_front){
strlist<Name1> *tem=ptr->next();
ptr->next(prev);
prev=ptr;
ptr=tem;
}
_front->next(prev);
}

这是昨天拿C++写的一个链表逆转的类
_front是头指针 _end是尾指针
ptr->next(prev) 看成 ptr->next=prev;就可以了

PS:他写的是带表头结点的链表吧..我没细看,应该是吧

这个是C++的,有点看不懂,斑竹可以改成C的吗?
PS:是啊


2006-07-22 18:27
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
收藏
得分:0 
void reverse(struct list *_front,struct list *_end)// _front为头指针,_end为尾指针
{
struct list *ptr=_front,*prev=0;

_front=_end;
_end=ptr;

while(ptr!=_front){
struct list *tem=ptr->next; //如果运行不可以通过..把定义放到函数开始处
ptr->next=prev;
prev=ptr;
ptr=tem;
}
_front->next=prev;
}

[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-07-22 18:32
穆扬
Rank: 1
等 级:禁止发言
帖 子:1910
专家分:0
注 册:2006-6-1
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽

2006-07-22 18:39
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
得分:0 
以下是引用SunShining在2006-7-22 18:32:49的发言:
void reverse(struct list *_front,struct list *_end)// _front为头指针,_end为尾指针
{
struct list *ptr=_front,*prev=0;

_front=_end;
_end=ptr;

while(ptr!=_front){
struct list *tem=ptr->next; //如果运行不可以通过..把定义放到函数开始处
ptr->next=prev;
prev=ptr;
ptr=tem;
}
_front->next=prev;
}

谢了,不过这个跟一楼的想法有点类似,不过循环条件容易理解了。


2006-07-22 18:41
快速回复:链表逆置,有没有更容易理解的算法。
数据加载中...
 
   



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

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