今天的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;