Linked list merge (time complexity 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 merger_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 = L1;
	L3 = pc;
	while(pa && pb){
		if(pa->data <= pb->data){
			pc->next = pa;
			pc = pa;
			pa = pa->next;
		}
		else{
			pc->next= pb;
			pc = pb;
			pb = pb->next;
		}
	}
	pc->next = pa?pa : pb;
	free(L2);
	


}
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);
	
	merger_list(L1,L2,L3);
    if(!(L3->next))cout<<"NULL";
    else print_list(L3);

	
	 
}

The time complexity of using this method to merge linked lists is O(n).

Guess you like

Origin blog.csdn.net/peachhhh/article/details/108555818