1. 程式人生 > >【問題求教】7-2 兩個有序連結串列序列的交集 (20 分)

【問題求教】7-2 兩個有序連結串列序列的交集 (20 分)

已知兩個非降序連結串列序列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");
}

請各位大大指點一下,感激不盡。