parent
cf79ff35a9
commit
013ba3c377
@ -0,0 +1,6 @@ |
||||
cmake_minimum_required(VERSION 3.21) |
||||
project(merge_two_sorted_linked_lists) |
||||
|
||||
set(CMAKE_CXX_STANDARD 14) |
||||
|
||||
add_executable(merge_two_sorted_linked_lists main.cpp) |
@ -0,0 +1,164 @@ |
||||
#include <iostream> |
||||
#include <fstream> |
||||
#include <string> |
||||
|
||||
using namespace std; |
||||
|
||||
class SinglyLinkedListNode { |
||||
public: |
||||
int data; |
||||
SinglyLinkedListNode *next; |
||||
|
||||
SinglyLinkedListNode(int node_data) { |
||||
this->data = node_data; |
||||
this->next = nullptr; |
||||
} |
||||
}; |
||||
|
||||
class SinglyLinkedList { |
||||
public: |
||||
SinglyLinkedListNode *head; |
||||
SinglyLinkedListNode *tail; |
||||
|
||||
SinglyLinkedList() { |
||||
this->head = nullptr; |
||||
this->tail = nullptr; |
||||
} |
||||
|
||||
void insert_node(int node_data) { |
||||
SinglyLinkedListNode* node = new SinglyLinkedListNode(node_data); |
||||
|
||||
if (!this->head) { |
||||
this->head = node; |
||||
} else { |
||||
this->tail->next = node; |
||||
} |
||||
|
||||
this->tail = node; |
||||
} |
||||
}; |
||||
|
||||
void print_singly_linked_list(SinglyLinkedListNode* node, string sep, ofstream& fout) { |
||||
while (node) { |
||||
fout << node->data; |
||||
|
||||
node = node->next; |
||||
|
||||
if (node) { |
||||
fout << sep; |
||||
} |
||||
} |
||||
} |
||||
|
||||
void free_singly_linked_list(SinglyLinkedListNode* node) { |
||||
while (node) { |
||||
SinglyLinkedListNode* temp = node; |
||||
node = node->next; |
||||
|
||||
free(temp); |
||||
} |
||||
} |
||||
|
||||
// Complete the mergeLists function below.
|
||||
|
||||
/*
|
||||
* For your reference: |
||||
* |
||||
* SinglyLinkedListNode { |
||||
* int data; |
||||
* SinglyLinkedListNode* next; |
||||
* }; |
||||
* |
||||
*/ |
||||
SinglyLinkedListNode* mergeLists(SinglyLinkedListNode* head1, SinglyLinkedListNode* head2) { |
||||
|
||||
if (head1 == nullptr) { |
||||
return head2; |
||||
} |
||||
if (head2 == nullptr) { |
||||
return head1; |
||||
} |
||||
|
||||
auto head_new = head1; |
||||
if (head_new->data > head2->data) { |
||||
head_new = head2; |
||||
head2 = head2->next; |
||||
} else { |
||||
head1 = head1->next; |
||||
} |
||||
|
||||
auto iter = head_new; |
||||
|
||||
while (1) { |
||||
if (head1 == nullptr) { |
||||
iter->next = head2; |
||||
break; |
||||
} |
||||
if (head2 == nullptr) { |
||||
iter->next = head1; |
||||
break; |
||||
} |
||||
|
||||
if (head1->data <= head2->data) { |
||||
iter->next = head1; |
||||
head1 = head1->next; |
||||
} else { |
||||
iter->next = head2; |
||||
head2 = head2->next; |
||||
} |
||||
|
||||
iter = iter->next; |
||||
} |
||||
|
||||
return head_new; |
||||
} |
||||
|
||||
int main() |
||||
{ |
||||
ofstream fout(getenv("OUTPUT_PATH")); |
||||
|
||||
int tests; |
||||
cin >> tests; |
||||
cin.ignore(numeric_limits<streamsize>::max(), '\n'); |
||||
|
||||
for (int tests_itr = 0; tests_itr < tests; tests_itr++) { |
||||
SinglyLinkedList* llist1 = new SinglyLinkedList(); |
||||
|
||||
int llist1_count; |
||||
cin >> llist1_count; |
||||
cin.ignore(numeric_limits<streamsize>::max(), '\n'); |
||||
|
||||
for (int i = 0; i < llist1_count; i++) { |
||||
int llist1_item; |
||||
cin >> llist1_item; |
||||
cin.ignore(numeric_limits<streamsize>::max(), '\n'); |
||||
|
||||
llist1->insert_node(llist1_item); |
||||
} |
||||
|
||||
SinglyLinkedList* llist2 = new SinglyLinkedList(); |
||||
|
||||
int llist2_count; |
||||
cin >> llist2_count; |
||||
cin.ignore(numeric_limits<streamsize>::max(), '\n'); |
||||
|
||||
for (int i = 0; i < llist2_count; i++) { |
||||
int llist2_item; |
||||
cin >> llist2_item; |
||||
cin.ignore(numeric_limits<streamsize>::max(), '\n'); |
||||
|
||||
llist2->insert_node(llist2_item); |
||||
} |
||||
|
||||
SinglyLinkedListNode* llist3 = mergeLists(llist1->head, llist2->head); |
||||
|
||||
print_singly_linked_list(llist3, " ", fout); |
||||
fout << "\n"; |
||||
|
||||
free_singly_linked_list(llist3); |
||||
} |
||||
|
||||
fout.close(); |
||||
|
||||
return 0; |
||||
} |
Loading…
Reference in new issue