单链表的删除,为啥我的代码跑不出来

img


#include <stdio.h>
#include <stdlib.h>

typedef struct node{
    int data;
    struct node* next;
}Node;

void CreatList(Node* head, int n){
    Node* p;
    p = (Node*)malloc(sizeof(Node));
    p = head;

    for(int i=0; i<n; i++){
        p->next = (Node*)malloc(sizeof(Node));
        scanf("%d", &p->next->data);
        p = p->next;
    }
    p->next = NULL;
}

void Function(Node* head1,Node* head2, Node* head3){
    Node *pb, *pc;
    int A[200] = {0}, i=0, j=1;
    pb = head2->next;
    pc = head3->next;

    while(pb && pc){
        while((pb->data != pc->data) && pb != NULL && pc != NULL){
            if(pb->data > pc->data){
                pc = pc->next;
            }
            if(pb->data < pc->data){
                pb = pb->next;
            }
        }

        if(pc == NULL || pb == NULL){
            break;
        }
        else{
            while(pb ->data == A[i] || pc->data == A[i]){
                if(pb->data == A[i]){
                    pb = pb->next;
                }
                if(pc->data == A[i]){
                    pc = pc->next;
                }
            }
        }

        A[i+1] = pb->data;
        i++;
        pb = pb->next;
        pc = pc->next;
    }

    Node* pa;
    pa = head1;

    while(pa->next){
        while(pa->next->data < A[j] && pa->next != NULL){
            pa = pa->next;
        }
        if(pa->next->data == A[j] && pa->next !=NULL){
            Node* p = pa->next;
            pa->next = p->next;
            free(p);
        }
        j++;
    }

}

void Print(Node* head1){
    Node* p = head1->next;

    while(p){
        printf("%d ", p->data);
        p = p->next;
    }

}
int main()
{
    Node *head1=NULL,*head2=NULL,*head3=NULL;
    int m,n,p;
    scanf("%d%d%d",&m, &n, &p);
    head1 = (Node*)malloc(sizeof(Node));
    head2 = (Node*)malloc(sizeof(Node));
    head3 = (Node*)malloc(sizeof(Node));
    CreatList(head1,m);
    CreatList(head2,n);
    CreatList(head3,p);
    Function(head1,head2,head3);
    Print(head1);
    return 0;
}

修改如下,供参考:

#include <stdio.h>
#include <stdlib.h>
typedef struct node {
    int    data;
    struct node* next;
}Node;
void CreatList(Node* head, int n) {
    Node* p;
    //p = (Node*)malloc(sizeof(Node));
    p = head;
    for (int i = 0; i < n; i++) {
        p->next = (Node*)malloc(sizeof(Node));
        scanf("%d", &p->next->data);
        p = p->next;
    }
    p->next = NULL;
}
void Function(Node* head1, Node* head2, Node* head3) {
    Node* pb, * pc, * pt, * p;
    pt = p = (Node*)malloc(sizeof(Node));
    p->next = NULL;
    //int A[200] = { 0 }, i = 0, j = 1;
    pb = head2->next;
    pc = head3->next;
    while (pb && pc) {
        if (pb->data > pc->data) {
            pc = pc->next;
        }
        else if (pb->data < pc->data) {
            pb = pb->next;
        }
        else {
            p->next = (Node*)malloc(sizeof(Node));
            p->next->next = NULL;
            p->next->data = pb->data;
            p = p->next;
            pb = pb->next;
            pc = pc->next;
        }
    }
    pb = head1;
    pc = pt;
    while (pb->next && pc->next) {
        if (pb->next->data != pc->next->data) {
            pb = pb->next;
        }
        else if (pb->next->data == pc->next->data) {
            p = pb->next;
            pb->next = p->next;
            free(p);
            pc = pc->next;
        }
    }
    while (pt){
        p = pt;
        pt = pt->next;
        free(p);
    }
    /*    while ((pb->data != pc->data) && pb != NULL && pc != NULL) {
            if (pb->data > pc->data) {
                pc = pc->next;
            }
            if (pb->data < pc->data) {
                pb = pb->next;
            }
        }
        if (pc == NULL || pb == NULL) {
            break;
        }
        else {
            while (pb->data == A[i] || pc->data == A[i]) {
                if (pb->data == A[i]) {
                    pb = pb->next;
                }
                if (pc->data == A[i]) {
                    pc = pc->next;
                }
            }
        }
        A[i + 1] = pb->data;
        i++;
        pb = pb->next;
        pc = pc->next;
    }
    Node* pa;
    pa = head1;
    while (pa->next) {
        while (pa->next->data < A[j] && pa->next != NULL) {
            pa = pa->next;
        }
        if (pa->next->data == A[j] && pa->next != NULL) {
            Node* p = pa->next;
            pa->next = p->next;
            free(p);
        }
        j++;
    }*/
}
void Print(Node* head1) {
    Node* p = head1->next;
    while (p) {
        printf("%d ", p->data);
        p = p->next;
    }
    printf("\n");
}
int main()
{
    Node* head1 = NULL, * head2 = NULL, * head3 = NULL;
    int m, n, p;
    scanf("%d%d%d", &m, &n, &p);
    head1 = (Node*)malloc(sizeof(Node)); head1->next = NULL;
    head2 = (Node*)malloc(sizeof(Node)); head2->next = NULL;
    head3 = (Node*)malloc(sizeof(Node)); head3->next = NULL;
    CreatList(head1, m);
    CreatList(head2, n);
    CreatList(head3, p);
    Function(head1, head2, head3);
    Print(head1);
    Print(head2);
    Print(head3);
    return 0;
}

数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633