读书人

这个算法到底错在哪? 好久没看出!解

发布时间: 2012-02-12 17:16:33 作者: rapoo

这个算法到底错在哪? 好久没看出!
删除有序递增单链表上相同的元素 算法如下 但老是不成功 错在哪?
#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);
}



[解决办法]
马虎了

C/C++ code
#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;
这里好像 不对啊

读书人网 >软件架构设计

热点推荐