链表合并

#include <stdio.h>
#include <malloc.h>

typedef struct LNode{		//定义结构体 
	int data;
	struct LNode *next;
}Node,*LinkList;

void InitList(LinkList &);	//初始化链表 
void output(LinkList);	//遍历链表 
void merge(LinkList & , LinkList &);	//合并链表 

int main(void){
	LinkList L;
	printf("请输入第一个链表(输入-1表示结束):");
	InitList(L);
	output(L);
	
	LinkList S;
	printf("请输入第二个链表(输入-1表示结束):");
	InitList(S);
	output(S);
	
	merge(L,S);
	
	return 0;
}

void InitList(LinkList &L){		//初始化链表 
	L = (Node*)malloc(sizeof(Node));
	L->next = NULL;
	int e;
	Node *p = L;
	scanf("%d",&e);
	while(e != -1){
		Node *s = (Node*)malloc(sizeof(Node));
		s->data = e;
		s->next = p->next;
		p->next = s;
		p = s;
		scanf("%d",&e);
	}
}

void output(LinkList L){	//遍历链表 
	Node *p = L->next;
	printf("当前链表是:");
	while(p != NULL){
		printf("%d ",p->data);
		p = p->next;
	}
	printf("
");
}

void merge(LinkList &L , LinkList &S){		//合并链表 
	Node *La = L->next;
	Node *Ls = S->next;
	LinkList C = L;
	Node *Lc = L;
	while(La != NULL && Ls != NULL){
		if(La->data <= Ls->data){
			Lc->next = La;
			Lc = La;
			La = La->next;
		}else{
			Lc->next = Ls;
			Lc = Ls;
			Ls = Ls->next;
		}
	}
	if(La != NULL){
		Lc->next = La;
	}
	if(Ls != NULL){
		Lc->next = Ls;
	}
	free(S);
	output(C);
}
原文地址:https://www.cnblogs.com/Timesi/p/12756212.html