题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
解题思路
链表的基本操作,递归版本比较简洁。
Code
- 非递归
/*
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;
} else if(pHead2 == nullptr) {
return pHead1;
}
ListNode *current = nullptr, *newHead = nullptr;
while(pHead1 != nullptr && pHead2 != nullptr) {
if(pHead1->val < pHead2->val) {
if(current == nullptr) {
current = pHead1;
newHead = current;
} else {
current->next = pHead1;
current = pHead1;
}
pHead1 = pHead1->next;
} else {
if(current == nullptr) {
current = pHead2;
newHead = current;
} else {
current->next = pHead2;
current = pHead2;
}
pHead2 = pHead2->next;
}
}
if(pHead1 != nullptr) {
current->next = pHead1;
}
if(pHead2 != nullptr) {
current->next = pHead2;
}
return newHead;
}
};
- 递归
/*
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;
} else if(pHead2 == nullptr) {
return pHead1;
}
ListNode *newHead = nullptr;
if(pHead1->val < pHead2->val) {
newHead = pHead1;
newHead->next = Merge(pHead1->next, pHead2);
} else {
newHead = pHead2;
newHead->next = Merge(pHead1, pHead2->next);
}
return newHead;
}
};
- java
/*
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;
else if(list2 == null) return list1;
ListNode head = list2;
if(list1.val < list2.val) {
head = list1;
head.next = Merge(list1.next, list2);
} else {
head.next = Merge(list1, list2.next);
}
return head;
}
}