去节点值重复链表 但是运行时提示莫内存地址不能为read 问题出在去重复节点的循环,请大虾指点模块

剑有偏锋 2010-04-29 01:59:25
#include <stdlib.h>
#include <stdio.h>
#define OverFlow -1
#define OK 1
#define EOR -1
typedef int Etype;
///////////////////////////////////////
typedef struct node
{
Etype data;
struct node * next;
}Node, * LinkList;

///////////////////////////////////
void In_LinkList( LinkList * Head_pointer)
{
* Head_pointer=NULL;
}
//////////////////////////////////////
int In_First(LinkList * Head_pointer,Etype x)
{
Node *p;
p=(LinkList)malloc(sizeof(Node));
if(p==NULL) return OverFlow;
p->data=x ;
p->next =*Head_pointer;
*Head_pointer=p;
return OK;
}
///////////////////////////////////////
LinkList Lo_LinkList(LinkList Head,Etype x)
{
LinkList p;
p=Head;
while(p!=NULL)
{
if(p->data =x) break;
p=p->next ;
}
return p;
}
///////////////////////////////////////////
int De_LinkList(LinkList * Head_pointer,Etype x)
{
Node *p,*q;
p=* Head_pointer;
if(p->data==x)
{
* Head_pointer=(* Head_pointer)->next;
free(p);
return OK;
}
else
{
q=p;
p=p->next;

while(p!=NULL)
{
if(p->data ==x)
{
q->next =p->next ;
free(p);
return OK;
}
q=p;
p=p->next ;
}
}
return EOR;
}
/////////////////////////////////////////
void Sh_LinkList(LinkList Head)
{
Node *p;
printf("\n");
p=Head;
if(p==NULL) printf("\n空表");
while(p!=NULL)
{
printf(" %d",p->data );
p=p->next ;
}
}
///////////////////////////////////////////
void SetNull_LinkList(LinkList * Head_pointer)
{
Node *p,*q;
p=*Head_pointer;
while(p!=NULL)
{
q=p;
p=p->next ;
free(q);
}
}
/////////////////////////////////////////////
int main()
{

LinkList Head, a, b,t;
int i;
Etype x;
In_LinkList(&Head);
do
{
printf("1 插入元素 \n");
printf("3 结束插入操作 \n");
scanf("%d",&i);

switch(i)
{
case 1:
printf("输入要插入的数 ");
scanf("%d",&x);
if(In_First(&Head,x)!=OK) printf("插入失败");
break;
case 3:
break;
default:
printf("输入错误 请重选\n");
break;
}
}while(i!=3);

printf("现在 链表为\n");
Sh_LinkList(Head);

//////////////////////////去重复节点循环
for(a=Head; a!=NULL; a=a->next )
{
for(b=a->next ; b!=NULL; b=b->next)
{
if(a->data == b->data )
{

t=b;
b=b->next;
De_LinkList(&Head,t->data);
continue;
}
}
}
///////////////////////////
printf("去重复后 链表为\n");
Sh_LinkList(Head);
printf("\n");
SetNull_LinkList(&Head);
return 0;
}
...全文
140 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
剑有偏锋 2010-04-29
  • 打赏
  • 举报
回复
你输入两个重复的值看下
比如说 3 3 5 2
就出错了
老吴笔记 2010-04-29
  • 打赏
  • 举报
回复
你的错误是怎么出现的?我这里运行没有出错。附操作记录:
1 插入元素
3 结束插入操作
1
输入要插入的数 100
1 插入元素
3 结束插入操作
1
输入要插入的数 200
1 插入元素
3 结束插入操作
3
现在 链表为

200 100去重复后 链表为

200 100
请按任意键继续. . .

70,024

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧