【問題求教】7-2 兩個有序連結串列序列的交集 (20 分)
阿新 • • 發佈:2018-12-11
已知兩個非降序連結串列序列S1與S2,設計函式構造出S1與S2的交集新連結串列S3。
輸入格式:
輸入分兩行,分別在每行給出由若干個正整數構成的非降序序列,用−1表示序列的結尾(−1不屬於這個序列)。數字用空格間隔。
輸出格式:
在一行中輸出兩個輸入序列的交集序列,數字間用空格分開,結尾不能有多餘空格;若新連結串列為空,輸出NULL
。
輸入樣例:
1 2 5 -1
2 4 5 8 10 -1
輸出樣例:
2 5
#include<stdio.h> #include<stdlib.h> #include<malloc.h> typedef struct Node *Node; struct Node { int data; Node Next; }; int j=0; void output(Node L); void compel(Node L1,Node L2); int main() { int i,n; Node S[2]; for(i=0;i<2;i++) { S[i]=(Node)malloc(sizeof(struct Node)); S[i]->Next=NULL; Node j=S[i]; while(scanf("%d",&n)!=EOF&&n>=0) { Node k=(Node)malloc(sizeof(struct Node)); k->data=n; k->Next=NULL; j->Next=k; j=k; } } compel(S[0],S[1]); } void compel(Node L1,Node L2) { int flag=1; Node p; p=L1->Next; Node S=(Node)malloc(sizeof(struct Node)); S->Next=NULL; while(p) { //printf("~%d~ ",p->data); Node q=L2->Next; while(q) { //printf("$$%d ",p->data==q->data); if(p->data==q->data) { Node t=(Node)malloc(sizeof(struct Node)); t->data=p->data; t->Next=NULL; S->Next=t; S=t; // if(flag) // { // flag=0; // printf("%d",S->data); // } // else // printf(" %d",S->data); } printf("1. %d\n",S->data); q=q->Next; } printf("2. %d\n",S->data); p=p->Next; } output(S); } void output(Node L)//出問題的程式碼,結果是無法正常輸出 { int flag=1; Node list=L->Next; if(L) { printf("[%d]",L->data); printf("\nList isn't empty!\n"); } while(list) { if(flag) { flag=0; printf("%d",list->data); } printf("*%d",list->data); } if(flag) printf("NULL"); }
請各位大大指點一下,感激不盡。