题目:输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是按照递增排序的。
#include <iostream>
using namespace std;
struct ListNode {
int m_nValue;
ListNode *m_pNext;
};
ListNode *CreateList() {
int a;
cin >> a;
ListNode *head;
head = NULL;
if (a != -1) {
head = new ListNode;
head->m_nValue = a;
head->m_pNext = CreateList();
}
return head;
}
ListNode *Merge(ListNode *head1, ListNode *head2) {
if (head1 == NULL || head2 == NULL)
return head1 == NULL ? head2 : head1;
ListNode *one = head1;
ListNode *two = head2;
ListNode *newhead = NULL;
if (one->m_nValue < two->m_nValue) {
newhead = one;
one = one->m_pNext;
} else {
newhead = two;
two = two->m_pNext;
}
ListNode *three = newhead;
while (one != NULL && two != NULL) {
if (one->m_nValue < two->m_nValue) {
three->m_pNext = one;
three = one;
one = one->m_pNext;
} else {
three->m_pNext = two;
three = two;
two = two->m_pNext;
}
}
if (one == NULL)
three->m_pNext = two;
else
three->m_pNext = one;
return newhead;
}
int main() {
ListNode *head1 = CreateList();
ListNode *head2 = CreateList();
ListNode *newhead = Merge(head1, head2);
while (newhead != NULL) {
cout << newhead->m_nValue << " ";
newhead = newhead->m_pNext;
}
cout << endl;
return 0;
}