C++ 数据结构:DS单链表--合并

题目描述
假定两个单链表是递增有序,定义并实现以下函数,完成两个单链表的合并,继续保持递增有序

int LL_merge(ListNode *La, ListNode *Lb)

输入
第1行先输入n表示有n个数据,接着输入n个数据 第2行先输入m表示有M个数据,接着输入m个数据
输出
输出合并后的单链表数据,数据之间用空格隔开

样例输入
3 11 33 55 4 22 44 66 88
样例输出
11 22 33 44 55 66 88

#include <iostream>
using namespace std;
#define ok 0

class ListNode {
	public:
		int data;
		ListNode *next;
		ListNode() {
			next = NULL;
		}
};
class LinkList {
	public:
		ListNode *head;
		int len;
		LinkList() {
			head = new ListNode;
			len = 0;
		}
		~LinkList() {
			ListNode *p,*q;
			p=head;
			while(p != NULL) {
				q = p;
				p = p->next;
				delete q;
			}
			len = 0;
			head = NULL;
		}
		ListNode createList(int n) {
			int i, length, data;
			len = n;
			ListNode* pnew = NULL;
			ListNode* tail = NULL;
			head->data = 0;
			head->next = NULL;
			tail = head;
			for (i = 1; i < len + 1; i++) {
				pnew = new ListNode();
				cin >> pnew->data;
				pnew->next = NULL;
				tail->next = pnew;
				tail = pnew;
			}
			return *head;
		}
		void LL_display() {
			ListNode *p;
			p = head->next;
			while(p) {
				cout<< p->data <<' ';
				p = p->next;
			}
			cout<<endl;
		}
		int LL_merge(LinkList *La) {
			LinkList *temp;
			ListNode *a = La->head->next;
			ListNode *b = head->next;
			ListNode *c = temp->head->next;
			while(a && b) {		 	// 当其中一个链表为空退出循环
				if(a->data < b->data) {	//对比两个链表的数据,按大小顺序排列
					c->next =  a->next; 
					c = c->next;
					a =  a->next;
				} else {
					c->next = b->next;
					c = c->next;
					b =  b->next;
				}	
			}
			while(a) {	//a不为空则直接把所有a结点放在新链表后面 
				c->next =  a->next;
				c = c->next;
				a =  a->next;
			}
			while(b) {	//b不为空则直接把所有a结点放在新链表后面 	
				c->next =  b->next;
				c = c->next;
				b =  b->next;
			}
			temp->LL_display();
		}
};

int main() {
	int n,data,index1,index2;
	LinkList a;
	LinkList b;
	cin>>n;
	a.createList(n);
	cin>>n;
	b.createList(n);
	a.LL_merge(b);
}
  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值