题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
python实现:
# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
# 返回合并后列表
def Merge1(self, pHead1, pHead2):
# write code here
if pHead1 is None:
return pHead2
if pHead2 is None:
return pHead1
p, q = pHead1, pHead2
if p.val<=q.val:
newHead = cur = p
p = p.next
else:
newHead = cur = q
q = q.next
while p and q:
if p.val<=q.val:
cur.next = p
p = p.next
else:
cur.next = q
q = q.next
cur = cur.next
if p:
cur.next = p
if q:
cur.next = q
return newHead
#法2:递归写法
def Merge(self, pHead1, pHead2):
if pHead1 is None:
return pHead2
if pHead2 is None:
return pHead1
if pHead1.val <= pHead2.val:
cur = pHead1
cur.next = self.Merge(pHead1.next, pHead2)
else:
cur = pHead2
cur.next = self.Merge(pHead1, pHead2.next)
return cur
c++实现:
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
//法1:递归写法
ListNode* Merge1(ListNode* pHead1, ListNode* pHead2)
{
if(pHead1==NULL)
return pHead2;
if(pHead2==NULL)
return pHead1;
ListNode* cur = NULL;
if(pHead1->val <= pHead2->val){
cur = pHead1;
cur->next = Merge(pHead1->next, pHead2);
}else{
cur = pHead2;
cur->next = Merge(pHead1, pHead2->next);
}
return cur;
}
//法2:非递归归并
ListNode* Merge(ListNode* pHead1, ListNode* pHead2){
if(pHead1==NULL)
return pHead2;
if(pHead2==NULL)
return pHead1;
ListNode* cur = NULL, *p1=pHead1, *p2=pHead2, *newHead = NULL;
if(p1->val <= p2->val){
newHead = p1;
cur = p1;
p1 = p1->next;
}else{
newHead = p2;
cur = p2;
p2 = p2->next;
}
while(p1 && p2){
if(p1->val <= p2->val){
cur->next = p1;
//cur = p1;
p1 = p1->next;
}else{
cur->next = p2;
//cur = p2;
p2 = p2->next;
}
cur = cur->next;
}
if(p1)
cur->next = p1;
if(p2)
cur->next = p2;
return newHead;
}
};