题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
题目思路
该题通过新建一个首节点,通过比较两个队列的首节点的大小,决定把首节点的值小的队列加入到新队种中,并将该节点删除,直到两个队列有个为空为止,此时再将不为空的队列加入到新队列中。
代码如下
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
if(pHead1==nullptr)
return pHead2;
if(pHead2==nullptr)
return pHead1;
ListNode* pHead = new ListNode(0);
ListNode* p = pHead;
while(pHead1!=nullptr&&pHead2!=nullptr)
{
if(pHead1->val<pHead2->val)
{
p->next=pHead1;
pHead1=pHead1->next;
}else
{
p->next=pHead2;
pHead2=pHead2->next;
}
p=p->next;
}
if(pHead1!=nullptr)
p->next=pHead1;
else
p->next=pHead2;
return pHead->next;
}
};
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode Merge(ListNode list1,ListNode list2) {
if(list1==null)
return list2;
if(list2==null)
return list1;
ListNode result = new ListNode(0);
ListNode list3=result;
while(list1!=null&&list2!=null)
{
if(list1.val<list2.val)
{
list3.next =list1;
list1=list1.next;
}else
{
list3.next=list2;
list2=list2.next;
}
list3=list3.next;
}
if(list1!=null)
list3.next=list1;
else
list3.next=list2;
return result.next;
}
}