1.题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
2.题目分析
假设两个有序链表分别为list1和list2,则当list1的头结点小于list2的头结点时,list1一定为新链表的头结点;同理,反之,list2为链表的头结点。若list1为头结点,则list2继续与list1的下一个结点(可以看做新的头结点)比较,直到比较到list1为空(list已经被比较完了,均小于list2),则可以将list2直接接在lsit1后面即可;反之,list2同理。
3.算法实现
ListNode* mergeList(ListNode* list1,ListNode* list2)
{
if(list1 == nullptr)
{
return list2;
}
if(list2 == nullptr)
{
return list1;
}
ListNode* current = new ListNode(-1);
ListNode* root = current;//root->val = -1;
while(list1!=nullptr && list2!=nullptr)
{
if(list1->val <= list2->val)
{
current->next = list1;
current = list1;
list1 = list1->next;
}
else
{
current->next = list2;
current = list2;
list2 = list2->next;
}
}
//如果还有没有比较完的序列,则直接挂在current后面
while(list1!=nullptr)
{
current->next = list1;
}
while(list2!=nullptr)
{
current->next = list2;
}
return root->next;//root->next才是链表的头结点
}
博客围绕输入两个单调递增链表,输出满足单调不减规则的合成链表展开。先描述题目,接着分析得出若list1头结点小则其为新链表头结点,反之list2为头结点,比较过程中一个链表为空时可直接连接另一个,最后提及算法实现。
595

被折叠的 条评论
为什么被折叠?



