标题:如何将一个链表变成逆向?
只看楼主
howema
Rank: 1
等 级:新手上路
帖 子:336
专家分:0
注 册:2005-10-4
结帖率:50%
 问题点数:0 回复次数:10 
如何将一个链表变成逆向?
就是将原链表的尾变成头,整个链表倒过来?
搜索更多相关主题的帖子: 链表 逆向 
2006-11-22 17:18
ChenMo
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:3
帖 子:481
专家分:10
注 册:2004-4-8
得分:0 
单向链稍麻烦,若建立的是双向链,倒置则十分容易。

而且常规的链表一般使用双向链,
这可以使得链的访问效率达到最好。
而单向链的使用是看是否有任意位置插入或删除的操作(每结点消耗一个指针的内存赢取效率,这是值得的),
若无,则使用单向链为最佳,如链栈,队列这两种数据结构,使用单向链来维护结点足矣。

欢迎加入 MVC 技术讨论群(新群:90093426)
2006-11-22 17:53
howema
Rank: 1
等 级:新手上路
帖 子:336
专家分:0
注 册:2005-10-4
得分:0 
单链表实现,有代码吗?
2006-11-22 20:14
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
得分:0 


void fanxu_link_list(nodelink *head)/*尾插倒序*/
{
nodelink p,pre,p1;
p1=*head;
if(p1==NULL)
{
printf("The link is empty!");
exit(1);
}
p=p1->next;
p1->next=NULL;
if(p!=NULL)
pre=p;
while(p!=NULL)
{
p=p->next;
pre->next=p1;
p1=pre;
pre=p;
}
*head=p1;
}



倚天照海花无数,流水高山心自知。
2006-11-22 20:51
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
得分:0 
void daozhilink(nodelink *head) /***头插倒序*****/
{
nodelink p1,p2,p3;
p3=*head;
if(p3==NULL)
printf("The link is empty!");
else
p1=p3->next;
p2=p1->next;
p3->next=NULL;
while(p1!=NULL)
{
p1->next=p3;
p3=p1;
p1=p2;
p2=p2->next;
}
*head=p3;
}

倚天照海花无数,流水高山心自知。
2006-11-22 20:51
howema
Rank: 1
等 级:新手上路
帖 子:336
专家分:0
注 册:2005-10-4
得分:0 

看不明白!

2006-11-23 09:24
财鸟
Rank: 1
等 级:新手上路
帖 子:132
专家分:0
注 册:2006-11-2
得分:0 
我靠!!!!!!!!!!!
修改首尾指针就可以了呀!!!!!!!!!!1
很简单呀!!!!!!!!!!!!!
或者在加一个指针域!!!!!!!!!!
我认为你没那个必要!!!!!!!!!
因为链表的操作很灵活!!!!!!!!!!
没那个表要去做这样的操作!!!!!!!!!1
2006-11-23 12:46
meiling01
Rank: 1
等 级:新手上路
帖 子:63
专家分:0
注 册:2006-11-2
得分:0 
看不明白阿,请五楼的版主给解释一下吧,谢谢了。
2006-11-23 16:34
dragonfly
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:1024
专家分:0
注 册:2006-3-20
得分:0 
4,5楼的有问题吧? 只需要把指针指向换了就行了
void reverse(node *head)
{
node *p,*p1,*p2;
p=head;
while(p->next!=NULL)
{
p1=p->next;
p2=p1->next;
...
//倒指针指向的过程仔细画图就出来了,
}
head = p;
}

2006-11-23 17:01
wyzn12
Rank: 1
等 级:新手上路
帖 子:129
专家分:0
注 册:2006-10-28
得分:0 

以前写过
#include<malloc.h>
#define LEN sizeof(DATA)

typedef struct PERSON
{
int num;
struct PERSON *next;
}DATA;

DATA *creat(void)
{
DATA *head,*p1,*p2;
p1=p2=(DATA *)malloc(LEN);
scanf("%d",&p1->num);
head=NULL;
while(p1->num)
{
if(head==NULL)head=p1;
else p2->next=p1;
p2=p1;
p1=(DATA *)malloc(LEN);
scanf("%d",&p1->num);
}
p2->next=NULL;
return head;
}

DATA *sort(DATA *head)
{
DATA *head1,*p1;
int flag=0;
head1=NULL;
p1=head;
while(p1)
{
flag=flag+1;
head=p1->next;
if(flag==1)
{
head1=p1;
head1->next=NULL;
}
else
{
p1->next=head1;
head1=p1;
}
p1=head;
}
return head1;
}

main()
{
DATA *head,*p;
printf("\ninput data [num]:\n");
head=creat();
head=sort(head);
printf("\noutput data have been sorted:\n");
p=head;
if(head==NULL)printf("\nLink null!\n");
else
{
while(p)
{
printf("%d ",p->num);
p=p->next;
}
}
getch();
}


新王登基,血流成河!
2006-11-23 22:58



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-104703-1-1.html




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

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