已知两个非降序链表序列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 <string.h> typedef struct Node *Node; struct Node { int data; Node Next; }; Node CList() { int d; Node head = (Node)malloc(sizeof(struct Node)),q; head -> Next = NULL; q = head; while(~scanf("%d",&d)&&d!=-1) { Node p = (Node)malloc(sizeof(struct Node)); p -> data = d; p -> Next = NULL; q -> Next = p; q = p; } return head; } Node Intersection(Node a,Node b) { a = a -> Next; b = b -> Next; Node head = (Node)malloc(sizeof(struct Node)); head -> Next = NULL; Node q = head; while(a && b) { if(a == NULL || a -> data > b -> data) { b = b -> Next; } else if(b == NULL || b -> data > a -> data) { a = a -> Next; } else { Node p = (Node)malloc(sizeof(struct Node)); p -> Next = NULL; p -> data = b -> data; q -> Next = p; q = p; a = a -> Next; b = b -> Next; } } return head; } void printL(Node a) { a = a -> Next; if(a == NULL)printf("NULL"); int flag = 0; while(a) { if(flag)printf(" %d",a -> data); else printf("%d",a -> data); a = a -> Next; flag = 1; } } int main() { Node a = CList(); Node b = CList(); Node c = Intersection(a,b); printL(c); }



所有评论(0)