剑指offer系列(25)合并两个排序的链表

剑指offer系列(25)合并两个排序的链表

输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。

示例1:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/he-bing-liang-ge-pai-xu-de-lian-biao-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

本题考查链表的基本操作,插入操作,归并排序的合并操作。

解题思路:利用归并排序的 merge 方法,进行合并。遍历两个单链表,当链表1 节点 小于 链表2节点值时,将链表1节点加入新链表,否则将链表2节点加入新链表,直至某个链表遍历结束。遍历结束后,当某个链表未遍历完,则直接将其加入新链表后即可。实现如下

class Solution {
public:
    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
		ListNode* cur1 = l1;
		ListNode* cur2 = l2;

		ListNode* resDummyHead = new ListNode(0);
		ListNode* cur_res = resDummyHead;
		while (cur1 && cur2){
			if (cur1->val <= cur2->val){
				cur_res->next = cur1;
				cur1 = cur1->next;
			}
			else if (cur2->val < cur1->val){
				cur_res->next = cur2;
				cur2 = cur2->next;
			}
			cur_res = cur_res->next;
		} 
		/*
		// 可直接将未加入节点链接至新链表
		if (cur1)   resHead->next = cur1;
        if (cur2)   resHead->next = cur2;

        return res->next;
		*/
		
		// 归并排序写法
		while(cur1){
			cur_res->next = cur1;
			cur1 = cur1->next;
			cur_res = cur_res->next;
		}
		while (cur2){
			cur_res->next = cur2;
			cur2 = cur2->next;
			cur_res = cur_res->next;
		}
		return resDummyHead->next;
	}
}

执行结果如下
执行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值