题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
时间限制:1秒 空间限制:32768K 热度指数:366049
本题知识点: 链表
思路
新建一个链表,然后两个链表头元素比较,取较小值加入到链表中
做这道题做了很久,虽然很简单,但总报错说死循环,后来发现原来是指针某些情况处理不太好,让指针的next指向了自己,导致了死循环,引以为戒
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* Merge(ListNode* p, ListNode* q)
{ ListNode* a;
ListNode *tail;
if(p&&q)
{
if (p->val < q->val)
{
a = tail = p;
p = p->next;
}
else
{
a = tail = q;
q = q->next;
}
while(p && q)
{
if (p->val < q->val) {
tail->next = p;
p = p->next;
}else{
tail->next = q;
q = q->next;
}
tail=tail->next;
}
if (q) tail->next = q;
if (p) tail->next = p;
}
else if(p)
a=p;
else a=q;
return a;
}
};
简洁一点的代码
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* Merge(ListNode* p, ListNode* q)
{
if(p==NULL)
return q;
else if(q==NULL)
return p;
else if(p->val<q->val)
{
p->next=Merge(p->next,q);
return p;
}
else
{
q->next=Merge(p,q->next);
return q;
}
}
};