题目:
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
分析:
在不破坏原有的两个链表的情况下,只能采用尾插法实现对应功能,通过不断申请新的链表节点来生成新的链表;
如果可以破坏原有的两个链表,那么可以通过不断的取原有两个链表的节点来实现
不破坏原有两个链表的实现代码如下所示:
/*
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 == NULL) || (pHead2 == NULL)) {
return pHead1;
}
if (pHead1 == NULL) {
return pHead1;
}
if (pHead2 == NULL) {
return pHead2;
}
ListNode* tmp = new ListNode(pHead1 -> val);
ListNode* resultHead = tmp;
ListNode* firstHead = pHead1;
ListNode* secondHead = pHead2;
ListNode* p = tmp;
if ((firstHead -> val) > (secondHead -> val)) {
tmp -> val = secondHead -> val;
secondHead = secondHead -> next;
} else {
firstHead = firstHead -> next;
}
while((firstHead != NULL) || (secondHead != NULL)) {
if (firstHead == NULL) {
while (secondHead != NULL) {
ListNode* tmpNode2 = new ListNode(secondHead -> val);
p -> next = tmpNode2;
p = p -> next;
secondHead = secondHead -> next;
}
break;
}
if (secondHead == NULL) {
while (firstHead != NULL) {
ListNode* tmpNode1 = new ListNode(firstHead -> val);
p -> next = tmpNode1;
p = p -> next;
firstHead = firstHead -> next;
}
break;
}
if ((firstHead -> val) < (secondHead -> val)) {
ListNode* tmpNode1 = new ListNode(firstHead -> val);
p -> next = tmpNode1;
p = p -> next;
firstHead = firstHead -> next;
} else {
ListNode* tmpNode2 = new ListNode(secondHead -> val);
p -> next = tmpNode2;
p = p -> next;
secondHead = secondHead -> next;
}
}
p -> next = NULL;
return resultHead;
}
};