017_合并两个排序的链表

来源:互联网 发布:市场调查数据 编辑:程序博客网 时间:2024/06/06 04:13
#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;}

1 0
原创粉丝点击