《数据结构学习与实验指导》2-12:两个有序链表序列的交集

来源:互联网 发布:冒充淘宝客服诈骗 编辑:程序博客网 时间:2024/05/17 02:23

实验内容:已知两个非降序链表序列S1与S2,要求构造出它们的交集链表S3。
输入说明:输入分2行,分别在每行给出由若干个正整数构成的非降序序列,用-1表示序列结尾(-1不属于序列)。数字用空格间隔。
输出说明:在一行中输出两个输入序列的交集序列,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL。
测试用例:
输入 | 输出
1 2 5 -1
2 4 5 8 10 -1 | 2 5
1 3 5 -1
2 4 6 8 10 -1 | NULL
1 2 3 4 5 -1
1 2 3 4 5 -1 | 1 2 3 4 5
3 5 7 -1
2 3 4 5 6 7 8 -1 | 3 5 7
-1
10 100 1000 -1 | NULL

#include <stdio.h>#include <stdlib.h>typedef struct Node {    int num;    struct Node *next;} *PNode, *PLink;PLink init();void add(int num, PLink link);void print(PLink link);void release(PLink link);int main() {    int num = 0;    PLink link1 = init();    do {        scanf("%d", &num);        if (num == -1) {            break;        }        add(num, link1);    } while (1);    PLink link2 = init();    do {        scanf("%d", &num);        if (num == -1) {            break;        }        add(num, link2);    } while (1);    PLink link3 = init();    PNode p1 = link1;    p1 = p1->next;    PNode p2 = link2;    p2 = p2->next;    while (p1 != NULL && p2 != NULL) {        if (p1->num < p2->num) {            p1 = p1->next;        } else if (p1->num > p2->num) {            p2 = p2->next;        } else {            add(p1->num, link3);            p1 = p1->next;            p2 = p2->next;        }    }    print(link3);    release(link1);    release(link2);    release(link3);    return 0;}PLink init() {    PNode pNode = (PNode) malloc(sizeof(PNode));    pNode->next = NULL;    return pNode;}void add(int num, PLink link) {    PNode p = link;    while (p->next != NULL) {        p = p->next;    }    PNode pNode = (PNode) malloc(sizeof(PNode));    pNode->num = num;    pNode->next = NULL;    p->next = pNode;}void release(PLink link) {    PNode p = link;    while (p != NULL) {        PNode pp = p;        free(pp);        p = p->next;    }}void print(PLink link) {    PNode p = link;    if (p->next != NULL) {        p = p->next;    } else {        printf("NULL\n");        return;    }    printf("%d", p->num);    while (p->next != NULL) {        p = p->next;        printf(" %d", p->num);    }    printf("\n");}
阅读全文
0 0
原创粉丝点击