c语言问题,急急急!关于链表的!

1个回答

  • #include

    #include

    typedef struct list{

    int elem;//存数链表节点的元素值

    struct list *next;//指向下一节点

    }LIST;

    LIST *createlist(int n)

    {

    LIST *head,*p,*p1;

    int i;

    head=(LIST *)malloc(sizeof(LIST));

    p=head;

    scanf("%d",&(p->elem));

    p->next=NULL;

    for(i=1;i

    {

    p1=(LIST *)malloc(sizeof(LIST));

    scanf("%d",&(p1->elem));

    p1->next=NULL;

    p->next=p1;

    p=p1;

    }

    return head;

    }

    LIST *A_B(LIST *A,LIST *B)//计算A-B,计算结果保存在A中

    {

    LIST *pa,*pa_prev,*pb;

    int e,flag;

    pa=A;

    pa_prev=A;

    while(pa!=NULL)//遍历链表A中的每一个元素

    {

    flag=0;

    e=pa->elem;

    pb=B;//对A中的每一个元素e,都从LB的表头开始查找

    while(pb!=NULL)

    {

    if (pb->elem==e) //若A中的元素B也有,则在A中删除该元素

    {

    if (pa==A) //pa是表头

    {

    A=pa->next;

    pa_prev=pa->next;

    pa=pa->next;

    flag=1;

    }

    else if(pa->next==NULL)//pa是表尾

    {

    pa=NULL;

    pa_prev->next=pa;

    flag=1;

    }

    else//非表头元素和表尾元素

    {

    pa_prev->next=pa->next;

    pa=pa->next;

    flag=1;

    }

    break;

    }

    else pb=pb->next;

    }

    if (flag==0) {pa_prev=pa;pa=pa->next;}

    }

    return A;

    }

    int main()

    {

    LIST *LA,*LB;

    LIST *p;

    int num;

    printf("请输入链表A的长度:");

    scanf("%d",&num);

    printf("请输入链表A的元素,中间用空格隔开:");

    LA=createlist(num);

    printf("n请输入链表B的长度:");

    scanf("%d",&num);

    printf("请输入链表B的元素,中间用空格隔开:");

    LB=createlist(num);

    LA=A_B(LA,LB);//计算集合差

    p=LA;//输出A-B的结果

    printf("nLA-LB=");

    while(p!=NULL)

    {

    printf("%4d",p->elem);

    p=p->next;

    }

    return 0;

    printf("n");

    }程序的运行结果:

    若满意,望采纳!