合并链表

用链表实现教材2.7.1节(42页)的线性表合并(也可以参考课件)。

输入要求

多组输入。
每组输入数据由3行组成。
第一行,输入两个整数a和b,分别代表链表的长度。
第二行和第三行,分别输入a个和b个整数。
详见代码和样例输入。

输出要求

见样例输出。每行最后一个整数后有一个空格。
空表用空行表示。

测试数据

输入示例

3 3
1 3 5
5 4 3
 

输出示例

la: 1 3 5 4
lb: 5 4 3


#include<stdio.h>
#include<stdlib.h>

typedef int ElemType;	// 元素数据类型 

typedef struct LNode{
     ElemType   data;       //数据域
     struct LNode  *next;   //指针域
}LNode,*LinkList;  

void createLinkList(LinkList &list, int n); // 创建n个整数链表,顺序与用户输入一致 
void printLinkList(LinkList list);			// 打印顺序表	
void mergeLinkList(LinkList &la, LinkList lb);// 实现 A=AUB 

int main(){
	int a,b;
	while(~scanf("%d%d",&a,&b)){
		LinkList la, lb, lc;
		createLinkList(la, a);
		createLinkList(lb, b);
		mergeLinkList(la, lb);
		printf("la: ");
		printLinkList(la);
		printf("lb: ");
		printLinkList(lb);
	}
}

************************************************************************************************************************

#include<stdio.h>
#include<stdlib.h>

typedef int ElemType;	// 元素数据类型 

typedef struct LNode{
     ElemType   data;       //数据域
     struct LNode  *next;   //指针域
}LNode,*LinkList;  

void createLinkList(LinkList &list, int n); // 创建n个整数链表,顺序与用户输入一致 
void printLinkList(LinkList list);			// 打印顺序表	
void mergeLinkList(LinkList &la, LinkList lb);// 实现 A=AUB 

int main(){
	int a,b;
	while(~scanf("%d%d",&a,&b)){
		LinkList la, lb, lc;
		createLinkList(la, a);
		createLinkList(lb, b);
		mergeLinkList(la, lb);
		printf("la: ");
		printLinkList(la);
		printf("lb: ");
		printLinkList(lb);
	}
}

void createLinkList(LinkList &list, int n){
	list = new LNode;
	list->next = NULL;
	LNode *r = list;
	for(int i=0;i<n;i++){
		LinkList p;
		p = new LNode;
		scanf("%d",&p->data);
		p->next = NULL;
		r->next = p;
		r = p;
	}
}
void printLinkList(LinkList list){
	LNode *p = list->next;
	while(p){
		printf("%d ", p->data);
		p = p->next;
	}
	printf("\n");
}	

void mergeLinkList(LinkList &la, LinkList lb){
	LinkList p =new LNode;
	LinkList q = new LNode;
	for(p = lb;p!=NULL;p=p->next){
		int k=0;
		for(q = la;q!= NULL;q = q->next){
			if(p->data == q->data)
				k = 1;			
		}
		if(k == 0){
			LinkList m  = new LNode;
			m = la;
			LNode *k = new LNode;
			k->data = p->data;
			while(m->next)
				m = m->next;
				m->next = k;
				k->next = NULL;
		}
	}	
}

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页