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

我觉得这个算法还不错,就是有点难理解,大家有没有更容易理解的算法啊!
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: 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: 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
菜鸟上路
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
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
得分:0 

#include<stdio.h>

#include<malloc.h>

#include<conio.h>


typedef struct Node

{

char data;

struct Node *next;

}Node,*NodePtr;


void main()

{

NodePtr head = (Node *)malloc(sizeof(Node));//头结点

NodePtr tail;//尾节点

head->next = NULL;

NodePtr p;

p = head ;

printf("*********************单链表逆置***********************\n");

/*初始化程序,建立单链表,从字母a到z的链表,有头结点*/

printf("正在初始化..\n");

for(int i=0;i<26 ;i++)

{

p->next = (Node *)malloc(sizeof(Node));

p = p->next;

p->data = 'a'+i;

}

p->next = NULL;

tail = p;

p = head;

while(p->next)

{

p=p->next;

printf("%c",p->data);

}

printf("\n任意键继续...\n");

getch();

while(head->next) //判断是否以及转置完毕

{

p=head; //初始化定位指针p的位置

while(p->next->next) //查找最后一个尚未转置的指针

p=p->next; //移动指针

p->next->next=p; //将最后的指针逆置

p->next=NULL; //添加尾部的标记

}

printf("\n逆置完成,结果如下\n");

p = tail;

while(p->next)

{

printf("%c",p->data);

p=p->next;

}

getch();

}
这是starrysky写的,其中红字好像不是注释的意思


2006-07-22 18:46
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
得分:0 
以下是引用SunShining在2006-7-22 18:43:14的发言:
我没细看你的 就直接发上来了

哈哈 猜到应该是类似的了

呵呵,这也没什么的


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

typedef struct Node

{

char data;

struct Node *next;

}Node,*NodePtr;


我一见这种写法就蒙...

为什么蒙啊?那您就不用看那个了,直接看逆置那里吧
while(head->next) //判断是否以及转置完毕

{

p=head; //初始化定位指针p的位置

while(p->next->next) //查找最后一个尚未转置的指针

p=p->next; //移动指针

p->next->next=p; //将最后的指针逆置

p->next=NULL; //添加尾部的标记

}


2006-07-22 18:58
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
得分:0 

while(head->next) //判断是否以及转置完毕

{

p=head; //初始化定位指针p的位置

while(p->next->next) //查找最后一个尚未转置的指针

p=p->next; //移动指针

p->next->next=p; //将最后的指针逆置

p->next=NULL; //添加尾部的标记

}
那您能解释下红字的意思吗?是怎样逐步转置的啊?


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

不好意思.刚回来

1.head->1->2->3->4->NULL

2.head->1->2->3->NULL
4->3

3.head->1->2->NULL
4->3->2

4.head->1->NULL
4->3->2->1

最后.p = tail;
p为head tail为 结点4 也就是尾结点

不知道我说明白没有..不明白再给你解释吧

谢谢SunShining版主,当天回去也分析了下,现在已经明白了。


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



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

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