1. 程式人生 > >單鏈表——求兩個集合的差集 A,B集合求差集放到C連結串列中

單鏈表——求兩個集合的差集 A,B集合求差集放到C連結串列中

#include <stdio.h>
#include <malloc.h>

typedef struct Node {
    int data;
    struct Node *next;
}LNode,*LinkList;
void list(LNode *A,LNode *B,LNode *C);
void PrintList(LNode *head);
void CreateList(LNode *A) { // 建立單迴圈連結串列,返回連結串列頭
    LNode *p;
    int i,n;
    scanf("%d",&n);
    for(i = 0; i < n; i++) {
        p = (LNode *)malloc(sizeof(LNode));
        scanf("%d",&p->data);
       p->next=A->next;
       A->next = p;
       A = p;
    }
}

void PrintList(LNode *head) {
    LNode *p = head->next;
    while(p) {
        printf("%d ",p->data);
        p = p->next;
    }
}
void list(LNode *A,LNode *B,LNode *C){
    LNode *pa,*pb,*pc;
    int count;
    pa=A->next;
    pc =C->next;
    while(pa){
        count = 0;
        pb=B->next;
        while(pb){
            if(pa->data==pb->data)
                count++;
            pb=pb->next;
        }

        if(count==0){
            pc = (LNode *)malloc(sizeof(LNode));
            pc->data=pa->data;
            pc->next=C->next;
            C->next = pc;
            C = pc;
        }
        pa = pa->next;
    }
}
int main() {
    LNode *A,*B,*C;
    A= (LNode *)malloc(sizeof(LNode));
    A->next=NULL;
    B = (LNode *)malloc(sizeof(LNode));
    B->next=NULL;
    C = (LNode *)malloc(sizeof(LNode));
    C->next=NULL;
    CreateList(A);
    CreateList(B);
    list(A,B,C);
    PrintList(C);
    return 0;
}