#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