Problem:
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.
分析:
归并排序的最后一个步骤。链表的归并的一个好处是当一个链表已经NULL时,只需将新链表的next赋给另一个链表的当前节点即可,不必再一一复制。
注意:头结点的使用
ListNode head(-1);
ListNode pNode = &head;
AC Code(C++):
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
//208 / 208 test cases passed.
//Runtime: 13 ms
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
if (l1 == NULL) return l2;
else if (l2 == NULL) return l1;
ListNode head(-1);
ListNode *pNode = &head;
while (l1 != NULL && l2 != NULL) {
while (l1 != NULL && l2 != NULL && l1->val <= l2->val) {
pNode->next = l1;
pNode = pNode->next;
l1 = l1->next;
}
while (l1 != NULL && l2 != NULL && l2->val <= l1->val) {
pNode->next = l2;
pNode = pNode->next;
l2 = l2->next;
}
}
if (l1 != NULL) {
pNode->next = l1;
}
if (l2 != NULL) {
pNode->next = l2;
}
return head.next;
}
};