#include <iostream>
#include <vector>
using namespace std;
typedef struct ListNode {
int data;
struct ListNode * next;
ListNode(int d) : data(d), next(NULL){}
};
ListNode *initList(int *array, unsigned int length) {
if(!array) {
return NULL;
}
ListNode * head = NULL;
head = new ListNode(array[0]);
ListNode * p = head;
head->next = NULL;
unsigned int i = 1;
for(; i < length; i++) {
p->next = new ListNode(array[i]);
p = p->next;
}
return head;
}
void printList(ListNode *head) {
ListNode * p = head;
if (!head){
return;
}
while (p && p->next) {
cout<<p->data<<"->";
p = p->next;
}
if (p) {
cout<<p->data<<endl;
}
}
ListNode *merge(ListNode *head1, ListNode *head2) {
ListNode *newHead = NULL;
ListNode *p1 = head1;
ListNode *p2 = head2;
ListNode *p = NULL;
if(!head1){
return head2;
}
if(!head2){
return head1;
}
p = newHead;
while(p1 && p2) {
if(p1->data <= p2->data) {
if(!newHead) {
newHead = p1;
p1 = p1->next;
newHead->next = NULL;
p = newHead;
} else {
p->next = p1;
p1 = p1->next;
p = p->next;
p->next = NULL;
}
} else {
if(!newHead) {
newHead = p2;
p2 = p2->next;
newHead->next = NULL;
p = newHead;
} else {
p->next = p2;
p2 = p2->next;
p = p->next;
p->next = NULL;
}
}
}
while(p1) {
if(!newHead) {
newHead = p1;
p1 = p1->next;
newHead->next = NULL;
p = newHead;
} else {
p->next = p1;
p1 = p1->next;
p = p->next;
p->next = NULL;
}
}
while(p2) {
if(!newHead) {
newHead = p2;
p2 = p2->next;
newHead->next = NULL;
p = newHead;
} else {
p->next = p2;
p2 = p2->next;
p = p->next;
p->next = NULL;
}
}
return newHead;
}
int main(){
int i = 0;
unsigned int length1 = 0;
unsigned int length2 = 0;
cin>>length1;
cin>>length2;
int *array1;
int *array2;
ListNode *head1 = NULL;
ListNode *head2 = NULL;
if(length1 > 0){
array1 = new int[length1];
for(i = 0; i < length1; i++) {
array1[i] = i * 10;
}
head1 = initList(array1, length1);
cout<<"list1: ";
printList(head1);
delete []array1;
} else {
head1 = NULL;
}
if(length2 > 0){
array2 = new int[length2];
for(i = 0; i < length2; i++) {
array2[i] = i * 5;
}
head2 = initList(array2, length2);
cout<<"list2: ";
printList(head2);
delete []array2;
} else {
head2 = NULL;
}
ListNode *newHead = merge(head1, head2);
cout<<"merged List: ";
printList(newHead);
return 1;
}
017_合併兩個排序的鏈表
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.