要求删除表中重复元素。例:输入1 2 3 3 4 输出1 2 3 4

代码没有输出
#include
#include
typedef int Elemtype;
typedef struct LNode{
Elemtype data;
struct LNode *next;
}LNode,*Linklist;
void Init_Linklist(Linklist *L)
{
*L=(Linklist)malloc(sizeof(LNode));
(L)->next=NULL;
}
void Create_Linklist(Linklist
L,int Len)
{
LNode *p,*q;
p=*L;
for(int i=0;i
q=(Linklist)malloc(sizeof(LNode));
scanf("%d",&q->data);
p->next=q;
p=q;
}
p->next=NULL;
}
void DeleteSame(Linklist *L)
{
LNode *p,*q,*s;
p=(*L)->next;
for(p;p!=NULL;p=p->next)
{
s=p;
for(q=p->next;q!=NULL;)
{
if(q->data==p->data)
{
s->next=q->next;
free(q);
q=s->next;
}
else
{
s=q;
q=q->next;
}
}
}
}
void Print_Linklist(Linklist *L)
{
LNode *p;
p=*L;
while(p->next)
{
p=p->next;
printf("%d ",p->data);
}
printf("\n");
}
int main(){
int Len;
Linklist L;
Init_Linklist(&L);
Create_Linklist(&L,Len);
scanf("%d ",&L);
DeleteSame(&L);
Print_Linklist(&L);
return 0;
}

img

main方法中,调用Create_Linklist(&L,Len);时,Len的值都没有。


while(1){
q=(Linklist)malloc(sizeof(LNode));
scanf("%d",&q->data);
p->next=q;
p=q;
char c=getchar();
if(c=='\n'){
  break;
}
}

int main(){
int Len;
Linklist L;

scanf("%d",&Len);
Init_Linklist(&L);
Create_Linklist(&L,Len);
DeleteSame(&L);
Print_Linklist(&L);
return 0;
}

改动处见注释,供参考:

#include<stdio.h>
#include<stdlib.h>
typedef int Elemtype;
typedef struct LNode{
    Elemtype data;
    struct LNode *next;
}LNode,*Linklist;
void Init_Linklist(Linklist *L)
{
    *L=(Linklist)malloc(sizeof(LNode));
    (*L)->next=NULL;
}
void Create_Linklist(Linklist L,int Len)
{
    LNode *p,*q;
    p = L;       //p=*L;  修改
    for(int i=0; ;i++){// i<Len 修改
        q=(Linklist)malloc(sizeof(LNode));
        scanf("%d",&q->data);
        p->next=q;
        p = q;
        char c = getchar();   //修改
        if (c == '\n')  break;//修改
    }
    p->next=NULL;
}
void DeleteSame(Linklist L)//(Linklist *L) 修改
{
    LNode *p,*q,*s;
    p = L->next;         //p=(*L)->next; 修改
    for(p;p!=NULL;p=p->next)
    {
        s=p;
        for(q=p->next;q!=NULL;)
        {
            if(q->data==p->data)
            {
                s->next=q->next;
                free(q);
                q=s->next;
            }
            else{
                s=q;
                q=q->next;
            }
        }
    }
}
void Print_Linklist(Linklist L) //Linklist *L) 修改
{
    LNode *p;
    p = L;     //p=*L; 修改
    while(p->next)
    {
        p=p->next;
        printf("%d ",p->data);
    }
    printf("\n");
}

int main(){
    int Len = 0; //修改
    Linklist L;
    Init_Linklist(&L);
    //scanf("%d ",&Len);//修改
    Create_Linklist(L,Len);//(&L,Len) 修改
    DeleteSame(L);//(&L) 修改
    Print_Linklist(L);//(&L) 修改
    return 0;
}