2021-5-8 日记 C++(十五)

今天的leetcode题目:

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

示例1:

输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
限制:

0 <= 链表长度 <= 1000

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

首先想到的是双指针
1、返回值是一个新的链表,首先我们先定义新链表的头结点fnode以方便第一个结点的插入
2、定义两个指针:
第一个指针dum指向新链表的头结点,用于待会完成链表连接后的返回操作
第二个指针cur也初始化为新链表的头结点,用于标记新链表的插入操作

ListNode* fnode=nullptr;
fnode = new ListNode;
ListNode* cur=fnode;

3、对其进行比较,将较小的值插入到cur之后,并将较小值的链表向后遍历,直到其中一个链表为空

while(l1!=nullptr && l2!=nullptr)
{
	if(l1->val >= l2->val)
	{
		cur->next=l2;
		l2=l2->next;
		cur=cur->next;
	}
	else
	{
		cur->next=l1;
		l1=l1->next;
		cur=cur->next;
	}
}

4、此时,如果另一个链表不为空,则将这个链表的所有元素插入到新链表之后

if(l1)
{
	cur->next=l1;
}
if(l2)
{
	cur->next=l2;
}

5、最后,返回新链表的第一个节点,注意不要返回头结点,因为头结点是一个空的结点

return fnode->next;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值