Skip to content

Commit 167c746

Browse files
committed
Day 27 More linkedlist problems
1 parent 0846019 commit 167c746

File tree

4 files changed

+186
-2
lines changed

4 files changed

+186
-2
lines changed

README.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
This repository will contain random algorithm and data structure problems I resolve to solve at least one a day.
33

44
## Current Streak
5-
**26 days**
5+
**27 days**
66
## Longest streak
7-
26 days (August 17, 2015 - Sept 11, 2015)
7+
27 days (August 17, 2015 - Sept 12, 2015)
88

99
## Include Directiory
1010
Include directory and sub directories contain STL like header file implementation of various algorithms and data structures. Following header only implementation,
@@ -35,6 +35,9 @@ please let me know.
3535
Give output as a linked list.
3636
- Swap nodes of a linkedlist without swapping data
3737
- Given a linked list, reverse alternate nodes and append at the end
38+
- Only given a node pointer, delete the node from the linked list.
39+
- Delete the entire linkedlist
40+
- Print middle node of linkedlist without iterating twice.
3841
#### Tree
3942
- STL like implementation (include dir)
4043
- Pretty Print of a tree
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
/**
2+
* Write a simple function to delete a linkedList
3+
*/
4+
5+
#include <iostream>
6+
7+
struct Node {
8+
int data;
9+
Node * next;
10+
Node( int d ) : data{ d }, next{ nullptr } { }
11+
};
12+
13+
void insert( Node * & head, int data )
14+
{
15+
Node * newNode = new Node( data );
16+
if ( head == nullptr ) {
17+
head = newNode;
18+
} else {
19+
Node * temp = head;
20+
while( temp->next != nullptr ) {
21+
temp = temp->next;
22+
}
23+
temp->next = newNode;
24+
}
25+
}
26+
27+
void printList( Node * head )
28+
{
29+
while( head ) {
30+
std::cout << head->data << "-->";
31+
head = head->next;
32+
}
33+
std::cout << "NULL" << std::endl;
34+
}
35+
36+
void deleteList( Node * & head )
37+
{
38+
while( head ) {
39+
Node * nextNode = head->next;
40+
delete( head );
41+
head = nextNode;
42+
}
43+
}
44+
45+
int main()
46+
{
47+
Node * head = nullptr;
48+
insert( head, 1 );
49+
insert( head, 2 );
50+
insert( head, 3 );
51+
std::cout << "Current List: ";
52+
printList( head );
53+
std::cout << "Deleting List \n";
54+
deleteList( head );
55+
std::cout << "Printing List: ";
56+
printList( head );
57+
return 0;
58+
}

linked_list_problems/deleteNode.cpp

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
#include <iostream>
2+
3+
struct Node {
4+
int data;
5+
Node * next;
6+
Node( int d ) : data{ d }, next{ nullptr } { }
7+
};
8+
9+
void insert( Node * & head, int data )
10+
{
11+
Node *newNode = new Node(data);
12+
if ( head == nullptr ) {
13+
head = newNode;
14+
} else {
15+
Node * temp = head;
16+
while ( temp->next != nullptr ) {
17+
temp = temp->next;
18+
}
19+
temp->next = newNode;
20+
}
21+
}
22+
23+
void printList( Node * head )
24+
{
25+
while( head ) {
26+
std::cout << head->data << "-->";
27+
head = head->next;
28+
}
29+
std::cout << "NULL" << std::endl;
30+
}
31+
32+
void deleteNode( Node * node )
33+
{
34+
// return if node is null
35+
if ( node == nullptr ) {
36+
return;
37+
}
38+
39+
//this method won't work if we are given last node
40+
if ( node->next == nullptr ) {
41+
return;
42+
}
43+
44+
Node * nextNode = node->next;
45+
node->data = nextNode->data;
46+
node->next = nextNode->next;
47+
delete nextNode;
48+
}
49+
50+
int main()
51+
{
52+
Node * head = nullptr;
53+
insert( head, 1 );
54+
insert( head, 12 );
55+
insert( head, 2 );
56+
insert( head, 3 );
57+
insert( head, 4 );
58+
printList( head );
59+
std::cout << "Deleting node with data 12 \n";
60+
deleteNode( head->next );
61+
printList( head );
62+
return 0;
63+
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
/**
2+
* Print middle node of linkedlist in one iteration.
3+
*/
4+
5+
#include <iostream>
6+
7+
struct Node {
8+
int data;
9+
Node * next;
10+
Node( int d ) : data{ d }, next{ nullptr } { }
11+
};
12+
13+
void insert( Node * & head, int data )
14+
{
15+
Node * newNode = new Node( data );
16+
if ( head == nullptr ) {
17+
head = newNode;
18+
} else {
19+
Node * temp = head;
20+
while( temp->next != nullptr ) {
21+
temp = temp->next;
22+
}
23+
temp->next = newNode;
24+
}
25+
}
26+
27+
void printList( Node * head )
28+
{
29+
while ( head ) {
30+
std::cout << head->data << "-->";
31+
head = head->next;
32+
}
33+
std::cout << "NULL" << std::endl;
34+
}
35+
36+
Node * middleNode( Node * head )
37+
{
38+
Node * fastPtr = head;
39+
Node * slowPtr = head;
40+
while ( fastPtr != nullptr && fastPtr->next != nullptr) {
41+
slowPtr = slowPtr->next;
42+
fastPtr = fastPtr->next->next;
43+
}
44+
return slowPtr;
45+
}
46+
47+
int main()
48+
{
49+
Node * head = nullptr;
50+
insert( head, 1 );
51+
insert( head, 2 );
52+
insert( head, 3 );
53+
insert( head, 4 );
54+
insert( head, 5 );
55+
printList( head );
56+
std::cout << "Middle node is : ";
57+
Node * mid = middleNode( head );
58+
std::cout << mid->data << std::endl;
59+
return 0;
60+
}

0 commit comments

Comments
 (0)