Skip to content

Commit fcab740

Browse files
committed
Linked lists hackerrank
1 parent 9ed1cef commit fcab740

File tree

5 files changed

+587
-1
lines changed

5 files changed

+587
-1
lines changed

hackerrank/CMakeLists.txt

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,4 +90,12 @@ add_executable(insert-node-tail src/insert-node-tail.cpp)
9090

9191
add_executable(array_manip src/array_manip.cpp)
9292

93-
add_executable(attrib_parser src/attrib_parser.cpp)
93+
add_executable(attrib_parser src/attrib_parser.cpp)
94+
95+
add_executable(merge_point src/merge_point.cpp)
96+
97+
add_executable(insert_node_dll src/insert_node_dll.cpp)
98+
99+
add_executable(reverse_dll src/reverse_dll.cpp)
100+
101+
add_executable(merge_ll src/merge_ll.cpp)

hackerrank/src/insert_node_dll.cpp

Lines changed: 177 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,177 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
5+
class DoublyLinkedListNode {
6+
public:
7+
int data;
8+
DoublyLinkedListNode *next;
9+
DoublyLinkedListNode *prev;
10+
11+
DoublyLinkedListNode(int node_data) {
12+
this->data = node_data;
13+
this->next = nullptr;
14+
this->prev = nullptr;
15+
}
16+
};
17+
18+
class DoublyLinkedList {
19+
public:
20+
DoublyLinkedListNode *head;
21+
DoublyLinkedListNode *tail;
22+
23+
DoublyLinkedList() {
24+
this->head = nullptr;
25+
this->tail = nullptr;
26+
}
27+
28+
void insert_node(int node_data) {
29+
DoublyLinkedListNode* node = new DoublyLinkedListNode(node_data);
30+
31+
if (!this->head) {
32+
this->head = node;
33+
} else {
34+
this->tail->next = node;
35+
node->prev = this->tail;
36+
}
37+
38+
this->tail = node;
39+
}
40+
};
41+
42+
void print_doubly_linked_list(DoublyLinkedListNode* node, string sep, ofstream& fout) {
43+
while (node) {
44+
cout << node->data;
45+
46+
node = node->next;
47+
48+
if (node) {
49+
cout << sep;
50+
}
51+
}
52+
}
53+
54+
void free_doubly_linked_list(DoublyLinkedListNode* node) {
55+
while (node) {
56+
DoublyLinkedListNode* temp = node;
57+
node = node->next;
58+
59+
free(temp);
60+
}
61+
}
62+
63+
// Complete the sortedInsert function below.
64+
65+
/*
66+
* For your reference:
67+
*
68+
* DoublyLinkedListNode {
69+
* int data;
70+
* DoublyLinkedListNode* next;
71+
* DoublyLinkedListNode* prev;
72+
* };
73+
*
74+
*/
75+
DoublyLinkedListNode* sortedInsert(DoublyLinkedListNode* head, int data) {
76+
77+
DoublyLinkedListNode* newNode = new DoublyLinkedListNode(data);
78+
bool filled = false;
79+
while(head != NULL)
80+
{
81+
if(data<head->data)
82+
{
83+
DoublyLinkedListNode* tempNewNode = head;
84+
newNode->next = head;
85+
newNode->prev = head->prev;
86+
if(head->prev != NULL)
87+
{
88+
head->prev->next = newNode;
89+
}
90+
head->prev = newNode;
91+
filled = true;
92+
break;
93+
}
94+
else
95+
{
96+
if(head->next == NULL)
97+
{
98+
break;
99+
}
100+
head = head->next;
101+
}
102+
}
103+
if(!filled)
104+
{
105+
// Add at the end
106+
// We should be at the last element
107+
head->next = newNode;
108+
newNode->prev = head;
109+
}
110+
// Now need to back iterate till we reach start
111+
while(head->prev != NULL)
112+
{
113+
head = head->prev;
114+
}
115+
return head;
116+
/*
117+
DoublyLinkedListNode* newNode = new DoublyLinkedListNode(data);
118+
if(head == NULL)
119+
{
120+
return newNode;
121+
}
122+
else if(data<head->data)
123+
{
124+
cout<<"Here \n";
125+
newNode->next = head;
126+
head->prev = newNode;
127+
return newNode;
128+
}
129+
else {
130+
cout<<"No here\n";
131+
DoublyLinkedListNode* tempNode = sortedInsert(head->next, data);
132+
cout<<tempNode->data<<endl;
133+
head->next = tempNode;
134+
tempNode->prev = head;
135+
return head;
136+
}*/
137+
}
138+
139+
int main()
140+
{
141+
ofstream fout(getenv("OUTPUT_PATH"));
142+
143+
int t;
144+
cin >> t;
145+
cin.ignore(numeric_limits<streamsize>::max(), '\n');
146+
147+
for (int t_itr = 0; t_itr < t; t_itr++) {
148+
DoublyLinkedList* llist = new DoublyLinkedList();
149+
150+
int llist_count;
151+
cin >> llist_count;
152+
cin.ignore(numeric_limits<streamsize>::max(), '\n');
153+
154+
for (int i = 0; i < llist_count; i++) {
155+
int llist_item;
156+
cin >> llist_item;
157+
cin.ignore(numeric_limits<streamsize>::max(), '\n');
158+
159+
llist->insert_node(llist_item);
160+
}
161+
162+
int data;
163+
cin >> data;
164+
cin.ignore(numeric_limits<streamsize>::max(), '\n');
165+
166+
DoublyLinkedListNode* llist1 = sortedInsert(llist->head, data);
167+
168+
print_doubly_linked_list(llist1, " ", fout);
169+
fout << "\n";
170+
171+
free_doubly_linked_list(llist1);
172+
}
173+
174+
fout.close();
175+
176+
return 0;
177+
}

hackerrank/src/merge_ll.cpp

Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
5+
class SinglyLinkedListNode {
6+
public:
7+
int data;
8+
SinglyLinkedListNode *next;
9+
10+
SinglyLinkedListNode(int node_data) {
11+
this->data = node_data;
12+
this->next = nullptr;
13+
}
14+
};
15+
16+
class SinglyLinkedList {
17+
public:
18+
SinglyLinkedListNode *head;
19+
SinglyLinkedListNode *tail;
20+
21+
SinglyLinkedList() {
22+
this->head = nullptr;
23+
this->tail = nullptr;
24+
}
25+
26+
void insert_node(int node_data) {
27+
SinglyLinkedListNode* node = new SinglyLinkedListNode(node_data);
28+
29+
if (!this->head) {
30+
this->head = node;
31+
} else {
32+
this->tail->next = node;
33+
}
34+
35+
this->tail = node;
36+
}
37+
};
38+
39+
void print_singly_linked_list(SinglyLinkedListNode* node, string sep, ofstream& fout) {
40+
while (node) {
41+
fout << node->data;
42+
43+
node = node->next;
44+
45+
if (node) {
46+
fout << sep;
47+
}
48+
}
49+
}
50+
51+
void free_singly_linked_list(SinglyLinkedListNode* node) {
52+
while (node) {
53+
SinglyLinkedListNode* temp = node;
54+
node = node->next;
55+
56+
free(temp);
57+
}
58+
}
59+
60+
// Complete the mergeLists function below.
61+
/*
62+
* For your reference:
63+
*
64+
* SinglyLinkedListNode {
65+
* int data;
66+
* SinglyLinkedListNode* next;
67+
* };
68+
*
69+
*/
70+
71+
SinglyLinkedListNode* mergeLists(SinglyLinkedListNode* head1, SinglyLinkedListNode* head2) {
72+
vector<int> data;
73+
while(head1 != NULL)
74+
{
75+
data.push_back(head1->data);
76+
head1 = head1->next;
77+
}
78+
while(head2 != NULL)
79+
{
80+
data.push_back(head2->data);
81+
head2 = head2->next;
82+
}
83+
84+
sort(data.begin(), data.end());
85+
SinglyLinkedList* newList = new SinglyLinkedList();
86+
for(int vals : data)
87+
{
88+
newList->insert_node(vals);
89+
}
90+
return newList->head;
91+
}
92+
93+
int main()
94+
{
95+
ofstream fout(getenv("OUTPUT_PATH"));
96+
97+
int tests;
98+
cin >> tests;
99+
cin.ignore(numeric_limits<streamsize>::max(), '\n');
100+
101+
for (int tests_itr = 0; tests_itr < tests; tests_itr++) {
102+
SinglyLinkedList* llist1 = new SinglyLinkedList();
103+
104+
int llist1_count;
105+
cin >> llist1_count;
106+
cin.ignore(numeric_limits<streamsize>::max(), '\n');
107+
108+
for (int i = 0; i < llist1_count; i++) {
109+
int llist1_item;
110+
cin >> llist1_item;
111+
cin.ignore(numeric_limits<streamsize>::max(), '\n');
112+
113+
llist1->insert_node(llist1_item);
114+
}
115+
116+
SinglyLinkedList* llist2 = new SinglyLinkedList();
117+
118+
int llist2_count;
119+
cin >> llist2_count;
120+
cin.ignore(numeric_limits<streamsize>::max(), '\n');
121+
122+
for (int i = 0; i < llist2_count; i++) {
123+
int llist2_item;
124+
cin >> llist2_item;
125+
cin.ignore(numeric_limits<streamsize>::max(), '\n');
126+
127+
llist2->insert_node(llist2_item);
128+
}
129+
130+
SinglyLinkedListNode* llist3 = mergeLists(llist1->head, llist2->head);
131+
132+
print_singly_linked_list(llist3, " ", fout);
133+
fout << "\n";
134+
135+
free_singly_linked_list(llist3);
136+
}
137+
138+
fout.close();
139+
140+
return 0;
141+
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy