链表求交集(时间复杂度O(n))

#include<iostream>
#include<malloc.h>
#include<cstdio>
using namespace std;
typedef struct LNode{
	int data;
	int sum = 0;
	struct LNode *next;
}LNode,*List;
void creat_list(List &L){
	L = (LNode *)malloc(sizeof(LNode));
	L->next = NULL;
	int temp;
	LNode *head = L;
	while(cin>>temp && temp != -1){
		LNode *p = (LNode *)malloc(sizeof(LNode));
		p->data = temp;
		if(!(L->next)){
			p->next = L->next;
			L->next = p;
			head = p;

		}
		else{
			p->next = head->next;
			head->next = p;
			head = p;
		}
	}

}
int equal_list(List &L1,List &L2,List &L3){
	L3 = (LNode *)malloc(sizeof(LNode));
	L3->next = NULL;
	LNode *pa = L1->next;
	LNode *pb = L2->next;
	LNode *pc = L3;
	while(pa && pb){
		if(pa->data > pb->data)pb = pb->next;
		else if(pa->data < pb->data)pa = pa->next;
		else {
			pc->next = pa;
			pc = pa;
			pa = pa->next;
			pb = pb->next;
		}
	
		
	}
	pc->next = NULL;



}
void print_list(List &L){
	LNode *p = L->next;
	int time = 1;
	while(p){
		if(time == 1)cout<<p->data;
		else cout<<" "<<p->data;
		p = p->next;
		time++;
	}
}
int main(){

	List L1,L2,L3;
	creat_list(L1);
	creat_list(L2);

	equal_list(L1,L2,L3);
    if(!(L3->next))cout<<"NULL";
    else print_list(L3);



}

猜你喜欢

转载自blog.csdn.net/peachhhh/article/details/108555843
今日推荐