將兩個各自有序的連結串列,合成一個有序的連結串列
阿新 • • 發佈:2019-02-11
方法一:
Node *Merge(Node *head1, Node *head2) { if(head1 == NULL) { return head2; } if(head2 == NULL) { return head1; } Node *head = NULL; Node *p1 = NULL; Node *p2 = NULL; if((head1->data) < (head2->data)) { head = head1; p1 = head1->next; p2 = head2; } else { head = head2; p2 = head2->next; p1 = head1; } Node *pcurrent = head; while((p1 != NULL) && (p2 != NULL)) { if(p1->data <= p2->data) { pcurrent->next = p1; pcurrent = p1; p1 = p1->next; } else { pcurrent->next = p2; pcurrent = p2; p2 = p2->next; } } if(p1 != NULL) { pcurrent->next = p1; } if(p2 != NULL) { pcurrent->next = p2; } return head; }
方法二:利用遞迴的方法
Node *MergeRecursive(Node *head1, Node *head2) { if(head1 == NULL) { return head2; } if(head2 == NULL) { return head1; } Node *head = NULL; if(head1->data < head2->data) { head = head1; head->next = MergeRecsive(head1->next, head2); } else { head = head2; head->next = MergeRecsive(head1, head2->next); } return head; }