| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2384 人关注过本帖
标题:[求助]原地逆置单链表
只看楼主 加入收藏
timebb
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2006-3-9
收藏
 问题点数:0 回复次数:6 
[求助]原地逆置单链表

我被这个题难住了,有没有高手可以提示一下。
具体是有一个单链表,要求只用指针,把最后的一个节点变为第一个节点,倒数第二个节点变为正数第二个节点,倒数第三各节点变为正数点三个节点………


我把这个程序写出来了但是那个逆置的循环还有一点问题,往高手解决。
附:
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int data;
struct node* next;
}node;

node *nizhi1()
{
node *head,*tail,*p,*mid,*last;
int i;
head=(node*)malloc(sizeof node);
head->next=NULL;
tail=head;
for(i=1;i<=6;i++)
{
p=(node*)malloc(sizeof node);
if(!p)
return NULL;
p->data=i;
p->next=NULL;
tail->next=p;
tail=p;
}
printf("逆置前");
tail=head->next;
while(tail!=NULL)
{
printf("%d",tail->data);
tail=tail->next;
}
printf("逆置后");
tail=head->next;
mid=tail;
last=mid;
mid=mid->next;
tail=mid->next;
while(tail!=NULL)
{
mid->next=last;
last=mid;
mid=tail;
tail=tail->next;
}
while(mid!=NULL)
{printf("-");
printf("%d",mid->data);
mid->next;
}return mid;
}

void main()
{
nizhi1();
}


后来我发现这个的错误是再逆置的时候原来的第一个节点的后一个没有赋空(原来的第一个节点逆置后变为最后一个,它的下一个应当为空),但是我不知到该怎么样解决。

[此贴子已经被作者于2006-3-27 14:30:25编辑过]

搜索更多相关主题的帖子: node 单链 节点 原地 int 
2006-03-15 13:15
jingzhongwen
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2006-3-15
收藏
得分:0 

void nizhi(linkList &sq)
{
node* p=sq->next;
node* tp=p;
sq->next=null;
while(tp!=null)

{

tp=p->next;
p->next=sq->next;
sq->next=p;
if(tp!=null)
p=tp;

}

}

2006-03-15 16:27
qzt040613
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:63
专家分:0
注 册:2006-3-15
收藏
得分:0 

status contray_cirl(cirllinklist&L)
{
t=L;
p=L->next;
q=p->next;
while(p!=L)
{p->next=t;
t=p;p=q;q=q->next;
};
L->next=t;
return ok;

}//cirl


天地无极,我本逍遥!
2006-03-18 14:05
sunnvya
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:1094
专家分:0
注 册:2005-11-23
收藏
得分:0 
小淘,好象你的错了哦!
status contray_cirl(linklist&L)
{
node* p=L->next;
node* q=L->next;
while(q->next)//让Q指向最后一个节点
{q=q->next;}
while(p)//节点的值交换就OK
{temp=*p;
*p=*q;
*q=temp;
p=p->next;
q->next=q;
}
return OK;
}

http://www. 第二站>>>提供源码下载
2006-03-18 16:13
YoungSun
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2006-3-25
收藏
得分:0 

楼上的好象不对吧?
q->next=q;是什么意思?

2006-03-26 19:23
Adminstrator
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2006-3-20
收藏
得分:0 
错拉被!
2006-03-26 22:31
stnlcd
Rank: 1
等 级:新手上路
帖 子:177
专家分:1
注 册:2004-11-21
收藏
得分:0 

[CODE]楼主的数据结构不好用,但就将就吧,以下程序包含比较完整的链表操作:创建,打印,销毁和逆置。
且所有程序用递归算法实现!!!!,相信对大家学习数据结构有帮助:
#include<stdio.h>
#include<stdlib.h>

typedef struct node {
int data;
struct node* next;
}node;

void CreateListD(node** list,int i,int l) {/*创建从i到l的链表*/
if(i<=l) {
*list=(node*)malloc(sizeof(node));
(*list)->data=i; (*list)->next=NULL;
CreateListD(&(*list)->next,i+1,l);
}
else printf("\nCreateList OK!\n");
}

void PrintListD(node* list) {
if(list) {
printf("%2d->",list->data);
PrintListD(list->next);
}
else printf("End\n");
}

void DestroyListD(node** list) {
if(*list) {
DestroyListD(&(*list)->next);
free(*list); *list=NULL;
}
else printf("\nDestroyed!\n");
}

node* NiZhi(node** list) {/*分治法*/
node* tmp;
if(*list&&(*list)->next&&(*list)->next->next) {
tmp=NiZhi(&(*list)->next);
tmp->next=*list;
*list=(*list)->next;
tmp->next->next=NULL;
return tmp->next;
}
else if(*list&&(*list)->next) {
(*list)->next->next=*list;
*list=(*list)->next;
(*list)->next->next=NULL;
return (*list)->next;
}
return NULL;
}

void main() {
node* list;
CreateListD(&list,1,6);
PrintListD(list);
NiZhi(&list);
PrintListD(list);
DestroyListD(&list);
}



[/CODE]


要让一个男人破产,请给他一架相机,要让一个男人倾家荡产,请给他一架望远镜。
2006-03-29 10:56
快速回复:[求助]原地逆置单链表
数据加载中...
 
   



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

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