标题:[求助]单链表中重复元素的删除
只看楼主
达布拉
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2007-8-8
 问题点数:0 回复次数:1 
[求助]单链表中重复元素的删除

编译都没错,就是运行是出错,只能删除第一个重复的元素,老出现提醒什么内存不足什么的,请各位帮我看看??????????
//删除单链表中重复的数据
//linklist.h头文件的内容
#include <stdio.h>
#include<malloc.h>
typedef int elemtype;
typedef struct node
{
elemtype data;
struct node *next;
}linklist;
#define NULL 0
//主程序
#include "linklist.h"
//creatlist函数用来创建单链表
linklist *creatlist(int n)
{
int x,k;
linklist *head,*r,*p;
p=(linklist*)malloc(sizeof(linklist));
head=p;
p->next=NULL;
r=p;
for(k=1;k<=n;k++)
{
printf("input value:\n");
scanf("%d",&x);
p=(linklist*)malloc(sizeof(linklist));
p->data=x;
p->next=NULL;
r->next=p;
r=r->next;
}
return(head);

}
//deletesamenode函数用来删除链表中重复的结点
linklist *deletesamenode(linklist *h)
{
linklist *p,*q,*s;
p=h->next;
s=p;
while(p!=NULL)
{
q=p->next;
while(q!=NULL)
{
if(q->data!=p->data)
{
s=q; //s为q的直接前趋指针,即s紧跟着指针q向右移动
q=q->next;
}
else
{
s->next=q->next; //此时q所指向的结点为待删除的结点
free(q);
q=s->next;//q指向后继结点,继续寻找与p所指结点值相同的结点
}
}//内while循环结束
p=p->next;
} //外while循环结束
return(h);
}
//output函数用来输出单链表的内容
void output(linklist *h)
{
linklist *p;
p=h->next;
while(p)
{
printf("%d",p->data);
p=p->next;
}
}
void main()
{
linklist *head;
int n;
printf("input the length of the list :\n");
scanf("%d",&n);
head=creatlist(n);
printf("output the list:\n");
output(head);
printf("\n");
printf("删除链表中的重复值\n");
head=deletesamenode(head);
output(head);//输出经过处理后的单链表,此时单链表中的值是唯一的!!!
}

搜索更多相关主题的帖子: 单链 表中 元素 linklist 内存 
2007-08-14 16:11
wingyip
Rank: 1
等 级:新手上路
威 望:2
帖 子:119
专家分:0
注 册:2007-7-16
得分:0 
s=p;
while(p!=NULL)
{
q=p->next;
s=p; //这里应该加一个这个

2007-08-19 06:39



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




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

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