| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1834 人关注过本帖
标题:如何逆序一个链表?
只看楼主 加入收藏
howema
Rank: 1
等 级:新手上路
帖 子:336
专家分:0
注 册:2005-10-4
结帖率:50%
收藏
 问题点数:0 回复次数:8 
如何逆序一个链表?
如何逆序一个链表?
搜索更多相关主题的帖子: 链表 逆序 
2006-12-06 21:59
perfect
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:81
专家分:0
注 册:2006-11-19
收藏
得分:0 
p指向第一个结点,q指向第二个结点, r指向第三个结点
之后
p->next=NULL;
while(r->next!=NULL)
{
q->next=p;
p=q;
q=r;
r=r->next;
}
r->next=q;
head=r;

或者是新建一个结点指针p 原来的链表头指针head,且没有头结点
p->next=NULL;
while(head!=NULL)
{
head->next=p->next;
p->next=head;
head=head->next;
}
head=p;

片言可以明百意 坐驰可以役万里
2006-12-06 22:21
perfect
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:81
专家分:0
注 册:2006-11-19
收藏
得分:0 
第二个少了一点.....
p->next=NULL;
while(head!=NULL)
{
q=head;
q->next=p->next;
p->next=q;
head=head->next;
}
head=p;

片言可以明百意 坐驰可以役万里
2006-12-06 22:27
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
以下是引用howema在2006-12-6 21:59:32的发言:
如何逆序一个链表?

也可以到数据结构版块找一下,我以前回过的.


倚天照海花无数,流水高山心自知。
2006-12-06 22:29
海蓝啸
Rank: 5Rank: 5
来 自:安徽
等 级:贵宾
威 望:17
帖 子:1611
专家分:0
注 册:2006-4-3
收藏
得分:0 

thinking

[此贴子已经被作者于2006-12-7 12:43:57编辑过]


这个社会太复杂。。。
2006-12-07 12:39
longerhe
Rank: 1
等 级:新手上路
帖 子:120
专家分:0
注 册:2006-10-10
收藏
得分:0 
将开始结点摘下,链接到终端结点之后成为新的终端终点,而原来的第二个结点成为新的开始结点,返回到新链表的头指针。
if(head->next&&head->next->next){
p=head->next;
q=p->next;
p->next=NULL;
while(q){
p=q;
q=q->next;
p->next=head->next;
head->next=p;
}
return head;
}
2006-12-07 12:54
多维数组
Rank: 1
等 级:新手上路
帖 子:238
专家分:0
注 册:2006-8-16
收藏
得分:0 
void INVERT(LinkList &list) {
LinkList p,q,r;
p=list;
q=NULL;
while(p!=NULL){
r=q;
q=p;
p=p->link;
q->link=r;
}
list=q;}

有事发邮件:tzp_1210@
2006-12-07 21:24
大妞
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-11-16
收藏
得分:0 

#include"stdio.h"
#define SIZE 6
#define LEN sizeof(struct point)

struct point
{
int n;
struct point *next;
};

main()
{
struct point *p,*q,*t,*head;
int i,j;

/* Create the link */
q=p=(struct point *) malloc(LEN);
printf("int node0-n:");
scanf("%d",&p->n);
head=p;
q->next=p;
for(i=1;i<SIZE;i++)
{
p=(struct point *) malloc(LEN);
printf("int node%d-n:",i);
scanf("%d",&p->n);
q->next=p;
q=p;
}
q->next=NULL;

/*Reverse the link. */
p=head;
q=head->next;
t=q->next;
head->next=NULL;
q->next=p;
for(i=1;i<SIZE-2;q->next=p,i++)
{
p=q;
q=t;
t=t->next;
}
t->next=q;
head=t;

/* Print the reversed link*/
p=head;
for(i=0;i<SIZE;i++)
{
printf("node%d.n=%d\n",i,p->n);
p=p->next;
}

}

2006-12-08 11:27
多维数组
Rank: 1
等 级:新手上路
帖 子:238
专家分:0
注 册:2006-8-16
收藏
得分:0 
楼上,好长呀.....
void INVERT(LinkList &list) {
LinkList p,q,r;
p=list;
q=NULL;
while(p!=NULL){
r=q;
q=p;
p=p->link;
q->link=r;
}
list=q;}
是我在数据结构的一本书上摘下来的,改了一下代码(因为这本书代码有采用C++的引用,可能有些看不懂):
LinkList *INVERT(LinkList *list) {
LinkList p,q,r;
p=list;
q=NULL;
while(p!=NULL){
r=q;
q=p;
p=p->link;
q->link=r;
}
list=q;
return (list);
}

[此贴子已经被作者于2006-12-8 19:55:35编辑过]


有事发邮件:tzp_1210@
2006-12-08 13:10
快速回复:如何逆序一个链表?
数据加载中...
 
   



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

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