设为首页
收藏本站
用户名
Email
自动登录
找回密码
密码
登录
注册
快捷导航
平台
Portal
论坛
BBS
文库
项目
群组
Group
我的博客
Space
搜索
搜索
热搜:
shell
linux
mysql
本版
用户
LinuxSir.cn,穿越时空的Linuxsir!
»
论坛
›
编程开发讨论区 —— LinuxSir.cn
›
Linux 程序设计专题讨论
›
关于链表的小问题.
返回列表
查看:
491
|
回复:
6
关于链表的小问题.
[复制链接]
山河水
山河水
当前离线
积分
50
IP卡
狗仔卡
发表于 2004-12-4 15:55:15
|
显示全部楼层
|
阅读模式
我的代码是要逆序一个链表.
先看一下我的代码:
#include <stdio.h>
#include <malloc.h>
#define DATATYPE2 int
typedef struct node{
DATATYPE2 data;
struct node* next;
}LINKLIST;
void display(LINKLIST *head)
{
LINKLIST *temp;
temp=head->next;
while(temp){
printf("\t%d",temp->data);
temp=temp->next;
}
printf("\n");
}
void freelist(LINKLIST *head )
{
while(head){
LINKLIST* temp = head;
head = head->next;
free(temp);
}
}
void main(){
int i;
LINKLIST *y,*head,*p,*q,*r;
head=(LINKLIST*)malloc(sizeof(LINKLIST));
head->next=NULL;
for(i=0;i<5;i++){ /*建立初始链表*/
y=(LINKLIST*)malloc(sizeof(LINKLIST));
y->data=i+10;
y->next=head->next;
head->next=y;
}
printf("原始链表为:");
display(head);
//在此改变顺序
q=NULL;p=head;
while(p!=NULL){
r=q;q=p;
p=p->next;
q->next=r;
}
head->next=q;
printf("倒序链表为:");
display(head);
freelist(head);
}
运行时总出错.我怀疑是head->next=q;这句话.
不知哪位可以解决一下阿!~~~~~~~~~~
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
显身卡
kj501
kj501
当前离线
积分
5317
IP卡
狗仔卡
发表于 2004-12-4 15:57:33
|
显示全部楼层
代码没有缩进!
回复
支持
反对
使用道具
举报
显身卡
eddy
eddy
当前离线
积分
48
IP卡
狗仔卡
发表于 2004-12-4 16:59:34
|
显示全部楼层
用双向循环链表来实现多简单阿
回复
支持
反对
使用道具
举报
显身卡
yunjizi
yunjizi
当前离线
积分
24
IP卡
狗仔卡
发表于 2004-12-4 18:30:41
|
显示全部楼层
按照你的程序,主程序main(),第9行(for循环)头节点head在此循环结束后,一定是指向你链表的最后一个节点,而最后一个节点的next域没有显式赋值(是一个无效指针),然后,你调用display()函数, temp=head->next;这句调用了这个无效指针,肯定会出错,唉,你编程风格一片混乱,这么点程序,把我都读胡涂了,再有,好好学好怎样调试,这样的问题一调试就明白了.
回复
支持
反对
使用道具
举报
显身卡
yunjizi
yunjizi
当前离线
积分
24
IP卡
狗仔卡
发表于 2004-12-4 18:35:26
|
显示全部楼层
主程序main()里,head->next=y;一句可改为if(head->next!=NULL)head->next=y;
回复
支持
反对
使用道具
举报
显身卡
yunjizi
yunjizi
当前离线
积分
24
IP卡
狗仔卡
发表于 2004-12-4 18:36:21
|
显示全部楼层
sorry,上面错了,if(head->next==NULL)head->next=y;
回复
支持
反对
使用道具
举报
显身卡
yunjizi
yunjizi
当前离线
积分
24
IP卡
狗仔卡
发表于 2004-12-4 19:07:41
|
显示全部楼层
还是不对,for循环里,head的next域只能由第一个结点赋值,试试改成以下
.
.
.
/*建立初始链表*/
y=(LINKLIST*)malloc(sizeof(LINKLIST));
head->next=y;//
for(i=0;i<5;i++)
{
y->data=i+10;
y->next=NULL;
//创建下一个结点
if(y->next==NULL&&i<4)
y->next=(LINKLIST*)malloc(sizeof(LINKLIST));
y=y->next;//最后一个结点,y=y->next=NULL
}
//以后访问链表都从head->next开始,y就没意义了
.
.
回复
支持
反对
使用道具
举报
显身卡
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册
本版积分规则
发表回复
回帖后跳转到最后一页
Copyright © 2002-2023
LinuxSir.cn
(http://www.linuxsir.cn/) 版权所有 All Rights Reserved.
Powered by
RedflagLinux!
技术支持:
中科红旗
|
京ICP备19024520号
快速回复
返回顶部
返回列表