leetcode21(合并两个有序链表)

这道LeetCode问题要求将两个已排序的链表合并成一个新的有序链表。解决方案包括递归法和迭代法。递归法每次递归选择较小节点,而迭代法创建新链表,通过比较两个旧链表节点的值,依次插入较小值直至其中一个链表遍历完,然后将剩余链表接入新链表。
摘要由CSDN通过智能技术生成

题目:将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有结点组成的

例:1->2->4, 1->3->4
output: 1->1->2->3->4->4

题解(一):递归法,每递归一次,确定一个节点,该节点是两个链表当前第一个节点节点数较小的那一个。

Number* combine(Number* pr1, Number* pr2)
	{
		
		if (pr1 == NULL) return pr2;
		else if (pr2 == NULL)return pr1;
		else if (pr1->num < pr2->num) { pr1->next = combine(pr1->next, pr2);return pr1; }
		else { pr2->next = combine(pr1, pr2->next); return pr2; }
		
	}

题解(二):迭代法,创造一个空新链表头,定义一个指针指向新链表头move,再定义两个指针node1、node2分别指向两个旧链表头,新链表头的next指针指向node1.val中和node2.val中较小的一个,然后move指针向前移动一格,指向被插入元素的指针也向后移动一格,在继续重复上述比较操作,直到有一个链表的遍历指针为null,在让move.next指向另一个链表被指针所指向的节点。

Number* combine(Number* pr1, Number*pr2)
	{
		Number*start = new Number,* front;
		front = start;
		
        while (pr1!=NULL&&pr2!=NULL)
		{
			if (pr1->num < pr2->num)
			{
				front->next = pr1;
				pr1 = pr1->next;
			}
			else {
				front->next = pr2;
				pr2 = pr2->next;
			}
			front = front->next;
		}
		front->next = pr1 == NULL ? pr2 : pr1;
		return start ;
		
		
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值