链表——两个有序链表序列的交集
2017-12-20 19:27
507 查看
已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的交集新链表S3。
输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−表示序列的结尾(−不属于这个序列)。数字用空格间隔。
在一行中输出两个输入序列的交集序列,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出
输出样例:
输入格式:
输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−表示序列的结尾(−不属于这个序列)。数字用空格间隔。
输出格式:
在一行中输出两个输入序列的交集序列,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL。
输入样例:
1 2 5 -1 2 4 5 8 10 -1
输出样例:
2 5
#include<bits/stdc++.h> using namespace std; #define OK 1 #define ERROR 0 typedef int Status; typedef int ElemType; typedef struct LNode *List; typedef struct LNode { ElemType data; struct LNode *next; } LNode,*LinkList; Status InitList(LinkList &L) { L = new LNode; L -> next = NULL; return OK; } Status IsEmpty(LinkList &L) { if(L == NULL || L -> next == NULL) { return OK; } else return ERROR; } Status CreatList(LinkList &L) { LNode *p,*q; L = new LNode; L -> next = NULL; q = new LNode; p = L; ElemType tmp; cin>>tmp; while(tmp != -1) { q -> data = tmp; q -> next = NULL; p -> next = q; p = q; q = new LNode; cin>>tmp; } } void PrintList(LinkList &L) { LNode *p = L ->next; while(p) { if(p -> next == NULL) { cout<<p -> data<<endl; } else cout<<p -> data<<" "; p = p -> next; } } //需O(min(N1,N2))时间。 //可以令结点指针P1指向S1的首结点, //P2指向S2首结点,不断比较P1与P2所指结点的值: //若两结点值相等,则创建新结点将这个值插入到新链表S3的末尾, //并将P1与P2分别往前移(P=P->next); //若不相等,将较小结点的对应结点指针往前移。 //创建结点时,注意用malloc函数申请内存; //由于每次总是插入S3末尾,可以用指针变量pRear指向S3尾结点, //添加新结点时插入pRear结点之后并更新pRear。 void IntersectList(LinkList &L1,LinkList &L2,LinkList &L3) { LNode *p1,*p2,*p3,*p; p1= L1 -> next; p2 = L2 ->next; p3 = L3; while(p1 && p2) { if(p1 -> data < p2 -> data) { p1 = p1 -> next; } else if(p1 -> data > p2 -> data) { p2 = p2 -> next; } else if(p1 -> data == p2 -> data) { p = new LNode; p -> data = p1 -> data; p -> next = NULL; p3 -> next = p; p3 = p; p1 = p1 -> next; p2 = p2 -> next; } } } int main() { LinkList L1,L2,L3; InitList(L1); InitList(L2); InitList(L3); CreatList(L1); CreatList(L2); IntersectList(L1,L2,L3); if(IsEmpty(L3)) { cout<<"NULL"<<endl; } else PrintList(L3); }
相关文章推荐
- 7-2 两个有序链表序列的交集(20 分)
- 5-52 两个有序链表序列的交集 (20分)
- 两个有序链表序列的交集
- 浙大PAT 2-12. 两个有序链表序列的交集 (解题思路)
- 7-2 两个有序链表序列的交集
- PTA-两个有序链表序列的交集
- 【C】两个有序链表序列的交集
- PTA数据结构之两个有序链表序列的交集
- PTA习题 两个有序链表序列的交集
- 实验项目 2-12:两个有序链表序列的交集
- Programming Ability Test学习 2-12. 两个有序链表序列的交集(20)
- <数据结构学习与实验指导>2-12两个有序链表序列的交集/2-13两个有序序列的中位数
- 5-16 两个有序链表序列的交集 (20分)
- 两个有序链表序列的交集(20 分)
- 每天作死一道题——两个有序链表序列的交集
- 2-12. 两个有序链表序列的交集
- 2-12. 两个有序链表序列的交集
- 2-12. 两个有序链表序列的交集(20) (ZJU_PAT 链表 | vector)
- PAT2-12. 两个有序链表序列的交集
- PAT 2-12 两个有序链表序列的交集(C语言实现)