struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode* head = NULL;
ListNode* inserted_node = NULL;
while (l1 != NULL && l2 != NULL) {
if (l1->val <= l2->val) {
inserted_node = l1;
l1 = l1->next;
}
else {
inserted_node = l2;
l2 = l2->next;
}
insertNewList(head, inserted_node);
}
while (l1 != NULL) {
inserted_node = l1;
l1 = l1->next;
insertNewList(head, inserted_node);
}
while (l2 != NULL) {
inserted_node = l2;
l2 = l2->next;
insertNewList(head, inserted_node);
}
return head;
}
private:
void insertNewList(ListNode* &head, ListNode* inserted_node) {
static ListNode* tail = head;
if (head != NULL) {
tail->next = inserted_node;
}
else {
head = inserted_node;
}
tail = inserted_node;
}
};
