这个算法到底错在哪? 好久没看出!
删除有序递增单链表上相同的元素 算法如下 但老是不成功 错在哪?
#include<stdio.h>
#include<stdlib.h>
#define datatype1 int
#define null 0
#define end -1
#define d "%d"
#define len sizeof(linklist)
typedef struct node
{
datatype1 data;
struct node *next;
}linklist;
/*头插入法建表函数*/
linklist *creatlinkh()
{
linklist *t,*head;
datatype1 x;
t=(linklist *) malloc(len);
t->next=null;head=t;
printf("请有序输入数据:\n");
scanf(d,&x);
while(x!=end)
{ t=(linklist *) malloc(len);
t->data=x;
t->next=null;
t->next=head->next;
head->next=t;
scanf(d,&x);
}
return(head);
}
/*删除元素*/
int del(linklist *head)
{
linklist *p,*t;
p=head->next;
while(p->next!=null)
{
t=p->next;
if(t->data==p->data)
{
p->next=t->next->next;
free(t);
}
else
p=p->next;
}
}
/*链表输出函数*/
void printlink(linklist *head)
{
linklist *p;
p=head;
printf("link is:");
while(p->next!=null)
{
p=p->next;
printf("%d->",p->data);
}
printf("\b\b \n");
}
void main()
{
linklist *hd1=null;
hd1=creatlinkh();
printlink(hd1);
del(hd1);
printlink(hd1);
}
[解决办法]
马虎了
#include <stdio.h > #include <stdlib.h > #define datatype1 int #define null 0 #define end -1 #define d "%d " #define len sizeof(linklist) typedef struct node { datatype1 data; struct node *next; }linklist; /*头插入法建表函数*/ linklist *creatlinkh() { linklist *t,*head; datatype1 x; t=(linklist *) malloc(len); t->next=null;head=t; printf( "请有序输入数据:\n "); scanf("%d",&x); //你这个地方错了 while(x!=end) { t=(linklist*)malloc(len); t->data=x; t->next=null; t->next=head->next; head->next=t; scanf("%d",&x); //还有这个地方 } return(head); } /*删除元素*/ int del(linklist *head) { linklist *p,*t; p=head->next; while(p->next!=null) { t=p->next; if(t->data==p->data) { p->next=t->next->next; free(t); } else p=p->next; } } /*链表输出函数*/ void printlink(linklist *head) { linklist *p; p=head; printf( "link is: "); while(p->next!=null) { p=p->next; printf( "%d- > ",p->data); } printf( "\b\b \n "); } int main() { linklist *hd1=null; hd1=creatlinkh(); printlink(hd1); del(hd1); printlink(hd1); getchar(); getchar(); return 0;}
[解决办法]
t- >data=x;
t- >next=null;
t- >next=head- >next;
head- >next=t;
这里好像 不对啊