数据结构 合并链表

合并链表

题目:

一直链表La和Lb最终的数据元素按非递减排列,将两表合并得到的新表的数据元素也按非递减排列。

1、

void MergeList(List La, List Lb, List &Lc) {
	
    InitList(Lc);	// 初始化表Lc
    i = j = k = 1;	// i,j,,k分别记录表La,Lb,Lc读取的位置
    La_len = ListLength(La);Lb_len = ListLength(Lb);
    
    while(i <= La_len && j <= Lb_len) {
		// 表La,Lb均为非空,循环结束时,La与Lb至少有一个已全部读取
        GetElem(La, i, ai);GetElem(Lb, j, bj);
        if (ai <= bj) {
            ListInsert(Lc, k++, ai);
            i++;
        }
        else {
            ListInsert(Lc, k++, bj);
            j++;
        }
    }
    
    // 若有剩余元素,直接将全部剩余元素按原顺序插入表Lc尾,两个循环必定指执行其中一个
    while (i <= La_len) {
		GetElem(La, i, ai);
        ListInsert(Lc, k++, ai);
    }
    while (j <= Lb_len) {
		GetElem(Lb, j, bj);
        ListInsert(Lc, k++, bj);
    }
}

2、递归

List MergeList(List L1, List L2) {
	
    if (L1 == nullptr) {
		return L2;
	}
	else if (L2 == nullptr) {
		return L1;
	}
	else if (L1->data < L2->data) {
		L1->next = MergeList(L1->next, L2);
		return L1;
	}
	else {
		L2->next = MergeList(L1, L2->next);
		return L2;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值