#include<iostream>
using namespace std;
struct list_node {
int val;
struct list_node* next;
};
list_node* input_list() {
int n, val;
list_node* phead = new list_node();
list_node* cur_pnode = phead;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> val;
if (i == 0) {
cur_pnode->val = val;
cur_pnode->next = NULL;
}
else {
list_node* new_pnode = new list_node();
new_pnode->val = val;
new_pnode->next =NULL;
cur_pnode->next = new_pnode;
cur_pnode = new_pnode;
}
}
return phead;
}
//list_node* merge_list(list_node* head1,list_node* head2){
// list_node* head = new list_node();
// list_node* cur = head;
// //bool flag = true;
// while(head != NULL || head2 != NULL){
// if(head2 == NULL || (head1 != NULL && head1->val < head2->val)){
// list_node* tmp = new list_node();
// tmp->val = head1->val;
// tmp->next = NULL;
// cur->next = tmp;
// cur = tmp;
// head1 = head1->next;
// }
// else{
// list_node* tmp = new list_node();
// tmp->val = head2->val;
// tmp->next = NULL;
// cur->next = tmp;
// cur = tmp;
// head2 = head2->next;
// }
// }
// return head->next;
//}
list_node* merge_list(list_node* head1, list_node* head2) {
if (head1 == NULL)
return head2;
if (head2 == NULL)
return head1;
if (head1->val <= head2->val) {
head1->next = merge_list(head1->next, head2);
return head1;
}
else {
head2->next = merge_list(head1, head2->next);
return head2;
}
}
void print_list(list_node* head) {
while (head != NULL) {
printf("%d-", head->val);
head = head->next;
}
cout << endl;
}
int main() {
list_node* head1 = input_list();
list_node* head2 = input_list();
print_list(head1);
print_list(head2);
list_node* new_head = merge_list(head1, head2);
print_list(new_head);
return 0;
}
合并两个有序链表
最新推荐文章于 2024-04-26 17:02:36 发布