I just want you to check this part of my code and tell me w
// I just want you to check this part of my code and tell me what i did wrong. I\'m in the process of learning singly
// linked lists. when i test it I keep getting SEGMENTATION FAULT error so most likely it is a memory leak.
//correct me if i\'m using linked lists or nodes wrong. this is part of a bigger code but i just need any erros corrected its in c++.
#include <iostream>
#include \"list.h\"
using namespace std;
//YOU: Write these five functions
//Make sure you handle empty Lists cleanly!
//Destructor. Free all memory in the list
List::~List() {
while(head_ptr)
{
Node* temp = head_ptr -> get_next();
delete head_ptr;
head_ptr = temp;
}
}
//Deletes the oldest Node inserted, and returns its data value
//The oldest Node inserted should be tail_ptr
int List::pop() {
if(list_size == 0)
{
return 0;
}
if(list_size == 1)
{
int ret_val = head_ptr -> get_data();
delete head_ptr;
head_ptr = NULL;
tail_ptr = NULL;
list_size = 0;
return ret_val;
}
else
{
int ret_val = tail_ptr -> get_data();
Node* temp = head_ptr;
while(temp -> get_next() != tail_ptr)
{
temp = temp -> get_next();
}
delete tail_ptr;
tail_ptr = temp;
delete temp;
tail_ptr -> set_next(NULL);
list_size--;
return ret_val;
}
}
//Adds a new Node to the end of the list
//The newest Node will be held in head_ptr
void List::push(int new_data) {
if(list_size == 0)head_ptr = tail_ptr;
Node* new_ptr = new Node(new_data,head_ptr);
new_ptr = head_ptr;
head_ptr -> set_next(new_ptr);
list_size++;
}
//Returns if a Node containing the passed-in integer is in the list
//True if such a Node exists, false otherwise
bool List::search(int test_data) {
if(list_size == 0)
{
return false;
}
Node* temp = head_ptr;
while(temp)
{
if(temp -> get_data() == test_data)
{
delete temp;
return 0;
}
temp = temp -> get_next();
}
return false;
}
//Removes the newest node containing the passed in integer
//Only remove one Node. Not all of them.
//Return true if any elements removed, false otherwise
bool List::remove (int old_data) {
if(list_size == 0)
{
return false;
}
if(list_size == 1)
{
delete head_ptr;
delete tail_ptr;
head_ptr = NULL;
tail_ptr = NULL;
list_size = 0;
return true;
}
if(head_ptr -> get_next() != NULL)
{
Node* tempNode = head_ptr;
delete head_ptr;
head_ptr = tempNode -> get_next();
list_size--;
return true;
}
return false;
}
Solution
#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
struct node
{
int info;
struct node *next;
}*start;
class single_llist
{
public:
node* create_node(int);
void insert_begin();
void insert_pos();
void insert_last();
void delete_pos();
void sort();
void search();
void update();
void reverse();
void display();
single_llist()
{
start = NULL;
}
};
main()
{
int choice, nodes, element, position, i;
single_llist sl;
start = NULL;
while (1)
{
cout<<endl<<\"---------------------------------\"<<endl;
cout<<endl<<\"Operations on singly linked list\"<<endl;
cout<<endl<<\"---------------------------------\"<<endl;
cout<<\"1.Insert Node at beginning\"<<endl;
cout<<\"2.Insert node at last\"<<endl;
cout<<\"3.Insert node at position\"<<endl;
cout<<\"4.Sort Link List\"<<endl;
cout<<\"5.Delete a Particular Node\"<<endl;
cout<<\"6.Update Node Value\"<<endl;
cout<<\"7.Search Element\"<<endl;
cout<<\"8.Display Linked List\"<<endl;
cout<<\"9.Reverse Linked List \"<<endl;
cout<<\"10.Exit \"<<endl;
cout<<\"Enter your choice : \";
cin>>choice;
switch(choice)
{
case 1:
cout<<\"Inserting Node at Beginning: \"<<endl;
sl.insert_begin();
cout<<endl;
break;
case 2:
cout<<\"Inserting Node at Last: \"<<endl;
sl.insert_last();
cout<<endl;
break;
case 3:
cout<<\"Inserting Node at a given position:\"<<endl;
sl.insert_pos();
cout<<endl;
break;
case 4:
cout<<\"Sort Link List: \"<<endl;
sl.sort();
cout<<endl;
break;
case 5:
cout<<\"Delete a particular node: \"<<endl;
sl.delete_pos();
break;
case 6:
cout<<\"Update Node Value:\"<<endl;
sl.update();
cout<<endl;
break;
case 7:
cout<<\"Search element in Link List: \"<<endl;
sl.search();
cout<<endl;
break;
case 8:
cout<<\"Display elements of link list\"<<endl;
sl.display();
cout<<endl;
break;
case 9:
cout<<\"Reverse elements of Link List\"<<endl;
sl.reverse();
cout<<endl;
break;
case 10:
cout<<\"Exiting...\"<<endl;
exit(1);
break;
default:
cout<<\"Wrong choice\"<<endl;
}
}
}
node *single_llist::create_node(int value)
{
struct node *temp, *s;
temp = new(struct node);
if (temp == NULL)
{
cout<<\"Memory not allocated \"<<endl;
return 0;
}
else
{
temp->info = value;
temp->next = NULL;
return temp;
}
}
void single_llist::insert_begin()
{
int value;
cout<<\"Enter the value to be inserted: \";
cin>>value;
struct node *temp, *p;
temp = create_node(value);
if (start == NULL)
{
start = temp;
start->next = NULL;
}
else
{
p = start;
start = temp;
start->next = p;
}
cout<<\"Element Inserted at beginning\"<<endl;
}
void single_llist::insert_last()
{
int value;
cout<<\"Enter the value to be inserted: \";
cin>>value;
struct node *temp, *s;
temp = create_node(value);
s = start;
while (s->next != NULL)
{
s = s->next;
}
temp->next = NULL;
s->next = temp;
cout<<\"Element Inserted at last\"<<endl;
}
void single_llist::insert_pos()
{
int value, pos, counter = 0;
cout<<\"Enter the value to be inserted: \";
cin>>value;
struct node *temp, *s, *ptr;
temp = create_node(value);
cout<<\"Enter the postion at which node to be inserted: \";
cin>>pos;
int i;
s = start;
while (s != NULL)
{
s = s->next;
counter++;
}
if (pos == 1)
{
if (start == NULL)
{
start = temp;
start->next = NULL;
}
else
{
ptr = start;
start = temp;
start->next = ptr;
}
}
else if (pos > 1 && pos <= counter)
{
s = start;
for (i = 1; i < pos; i++)
{
ptr = s;
s = s->next;
}
ptr->next = temp;
temp->next = s;
}
else
{
cout<<\"Positon out of range\"<<endl;
}
}
void single_llist::sort()
{
struct node *ptr, *s;
int value;
if (start == NULL)
{
cout<<\"The List is empty\"<<endl;
return;
}
ptr = start;
while (ptr != NULL)
{
for (s = ptr->next;s !=NULL;s = s->next)
{
if (ptr->info > s->info)
{
value = ptr->info;
ptr->info = s->info;
s->info = value;
}
}
ptr = ptr->next;
}
}
void single_llist::delete_pos()
{
int pos, i, counter = 0;
if (start == NULL)
{
cout<<\"List is empty\"<<endl;
return;
}
cout<<\"Enter the position of value to be deleted: \";
cin>>pos;
struct node *s, *ptr;
s = start;
if (pos == 1)
{
start = s->next;
}
else
{
while (s != NULL)
{
s = s->next;
counter++;
}
if (pos > 0 && pos <= counter)
{
s = start;
for (i = 1;i < pos;i++)
{
ptr = s;
s = s->next;
}
ptr->next = s->next;
}
else
{
cout<<\"Position out of range\"<<endl;
}
free(s);
cout<<\"Element Deleted\"<<endl;
}
}
void single_llist::update()
{
int value, pos, i;
if (start == NULL)
{
cout<<\"List is empty\"<<endl;
return;
}
cout<<\"Enter the node postion to be updated: \";
cin>>pos;
cout<<\"Enter the new value: \";
cin>>value;
struct node *s, *ptr;
s = start;
if (pos == 1)
{
start->info = value;
}
else
{
for (i = 0;i < pos - 1;i++)
{
if (s == NULL)
{
cout<<\"There are less than \"<<pos<<\" elements\";
return;
}
s = s->next;
}
s->info = value;
}
cout<<\"Node Updated\"<<endl;
}
void single_llist::search()
{
int value, pos = 0;
bool flag = false;
if (start == NULL)
{
cout<<\"List is empty\"<<endl;
return;
}
cout<<\"Enter the value to be searched: \";
cin>>value;
struct node *s;
s = start;
while (s != NULL)
{
pos++;
if (s->info == value)
{
flag = true;
cout<<\"Element \"<<value<<\" is found at position \"<<pos<<endl;
}
s = s->next;
}
if (!flag)
cout<<\"Element \"<<value<<\" not found in the list\"<<endl;
}
void single_llist::reverse()
{
struct node *ptr1, *ptr2, *ptr3;
if (start == NULL)
{
cout<<\"List is empty\"<<endl;
return;
}
if (start->next == NULL)
{
return;
}
ptr1 = start;
ptr2 = ptr1->next;
ptr3 = ptr2->next;
ptr1->next = NULL;
ptr2->next = ptr1;
while (ptr3 != NULL)
{
ptr1 = ptr2;
ptr2 = ptr3;
ptr3 = ptr3->next;
ptr2->next = ptr1;
}
start = ptr2;
}
void single_llist::display()
{
struct node *temp;
if (start == NULL)
{
cout<<\"The List is Empty\"<<endl;
return;
}
temp = start;
cout<<\"Elements of list are: \"<<endl;
while (temp != NULL)
{
cout<<temp->info<<\"->\";
temp = temp->next;
}
cout<<\"NULL\"<<endl;
}
output:
---------------------------------
Operations on singly linked list
---------------------------------
1.Insert Node at beginning
2.Insert node at last
3.Insert node at position
4.Sort Link List
5.Delete a Particular Node
6.Update Node Value
7.Search Element
8.Display Linked List
9.Reverse Linked List
10.Exit
Enter your choice : Wrong choice
---------------------------------
Operations on singly linked list
---------------------------------
1.Insert Node at beginning
2.Insert node at last
3.Insert node at position
4.Sort Link List
5.Delete a Particular Node
6.Update Node Value
7.Search Element
8.Display Linked List
9.Reverse Linked List
10.Exit
Enter your choice : Wrong choice
---------------------------------
Operations on singly linked list
---------------------------------
1.Insert Node at beginning
2.Insert node at last
3.Insert node at position
4.Sort Link List
5.Delete a Particular Node
6.Update Node Value
7.Search Element
8.Display Linked List
9.Reverse Linked List
10.Exit
Enter your choice : Wrong choice
---------------------------------
Operations on singly linked list
---------------------------------
1.Insert Node at beginning
2.Insert node at last
3.Insert node at position
4.Sort Link List
5.Delete a Particular Node
6.Update Node Value
7.Search Element
8.Display Linked List
9.Reverse Linked List
10.Exit
Enter your choice : Wrong choice
---------------------------------
Operations on singly linked list
---------------------------------
1.Insert Node at beginning
2.Insert node at last
3.Insert node at position
4.Sort Link List
5.Delete a Particular Node
6.Update Node Value
7.Search Element
8.Display Linked List
9.Reverse Linked List
10.Exit
Enter your choice : Wrong choice
---------------------------------
Operations on singly linked list
---------------------------------
1.Insert Node at beginning
2.Insert node at last
3.Insert node at position
4.Sort Link List
5.Delete a Particular Node
6.Update Node Value
7.Search Element
8.Display Linked List
9.Reverse Linked List
10.Exit
Enter your choice : Wrong choice
---------------------------------
Operations on singly linked list
---------------------------------
1.Insert Node at beginning
2.Insert node at last
3.Insert node at position
4.Sort Link List
5.Delete a Particular Node
6.Update Node Value
7.Search Element
8.Display Linked List
9.Reverse Linked List
10.Exit
Enter your choice : Wrong choice
---------------------------------
Operations on singly linked list
---------------------------------
1.Insert Node at beginning
2.Insert node at last
3.Insert node at position
4.Sort Link List
5.Delete a Particular Node
6.Update Node Value
7.Search Element
8.Display Linked List
9.Reverse Linked List
10.Exit
Enter your choice : Wrong choice
---------------------------------
Operations on singly linked list
---------------------------------
1.Insert Node at beginning
2.Insert node at last
3.Insert node at position
4.Sort Link List
5.Delete a Particular Node
6.Update Node Value
7.Search Element
8.Display Linked List
9.Reverse Linked List
10.Exit
Enter your choice : Wrong choice
---------------------------------
Operations on singly linked list
---------------------------------
1.Insert Node at beginning
2.Insert node at last
3.Insert node at position
4.Sort Link List
5.Delete a Particular Node
6.Update Node Value
7.Search Element
8.Display Linked List
9.Reverse Linked List
10.Exit
Enter your choice : Wrong choice
---------------------------------
Operations on singly linked list
---------------------------------
1.Insert Node at beginning
2.Insert node at last
3.Insert node at position
4.Sort Link List
5.Delete a Particular Node
6.Update Node Value
7.Search Element
8.Display Linked List
9.Reverse Linked List
10.Exit
Enter your choice : Wrong choice
---------------------------------
Operations on singly linked list
---------------------------------
1.Insert Node at beginning
2.Insert node at last
3.Insert node at position
4.Sort Link List
5.Delete a Particular Node
6.Update Node Value
7.Search Element
8.Display Linked List
9.Reverse Linked List
10.Exit
Enter your choice : Wrong choice
---------------------------------
Operations on singly linked list
---------------------------------
1.Insert Node at beginning
2.Insert node at last
3.Insert node at position
4.Sort Link List
5.Delete a Particular Node
6.Update Node Value
7.Search Element
8.Display Linked List
9.Reverse Linked List
10.Exit
Enter your choice : Wrong choice
---------------------------------
Operations on singly linked list
---------------------------------
1.Insert Node at beginning
2.Insert node at last
3.Insert node at position
4.Sort Link List
5.Delete a Particular Node
6.Update Node Value
7.Search Element
8.Display Linked List
9.Reverse Linked List
10.Exit
Enter your choice : Wrong choice
---------------------------------
Operations on singly linked list
---------------------------------
1.Insert Node at beginning
2.Insert node at last
3.Insert node at position
4.Sort Link List
5.Delete a Particular Node
6.Update Node Value
7.Search Element
8.Display Linked List
9.Reverse Linked List
10.Exit
Enter your choice : Wrong choice
---------------------------------
Operations on singly linked list
---------------------------------
1.Insert Node at beginning
2.Insert node at last
3.Insert node at position
4.Sort Link List
5.Delete a Particular Node
6.Update Node Value
7.Search Element
8.Display Linked List
9.Reverse Linked List
10.Exit
Enter your choice : Wrong choice
---------------------------------
Operations on singly linked list
---------------------------------
1.Insert Node at beginning
2.Insert node at last
3.Insert node at position
4.Sort Link List
5.Delete a Particular Node
6.Update Node Value
7.Search Element
8.Display Linked List
9.Reverse Linked List
10.Exit
Enter your choice : Wrong choice
---------------------------------
Operations on singly linked list
---------------------------------
1.Insert Node at beginning
2.Insert node at last
3.Insert node at position
4.Sort Link List
5.Delete a Particular Node
6.Update Node Value
7.Search Element
8.Display Linked List
9.Reverse Linked List
10.Exit
Enter your choice : Wrong choice
---------------------------------
Operations on singly linked list
---------------------------------
1.Insert Node at beginning
2.Insert node at last
3.Insert node at position
4.Sort Link List
5.Delete a Particular Node
6.Update Node Value
7.Search Element
8.Display Linked List
9.Reverse Linked List
10.Exit
Enter your choice : Wrong choice
---------------------------------
Operations on singly linked list
---------------------------------
1.Insert Node at beginning
2.Insert node at last
3.Insert node at position
4.Sort Link List
5.Delete a Particular Node
6.Update Node Value
7.Search Element
8.Display Linked List
9.Reverse Linked List
10.Exit
Enter your choice : Wrong choice
---------------------------------
Operations on singly linked list
---------------------------------
1.Insert Node at beginning
2.Insert node at last
3.Insert node at position
4.Sort Link List
5.Delete a Particular Node
6.Update Node Value
7.Search Element
8.Display Linked List
9.Reverse Linked List
10.Exit
Enter your choice : Wrong choice
---------------------------------
Operations on singly linked list
---------------------------------
1.Insert Node at beginning
2.Insert node at last
3.Insert node at position
4.Sort Link List
5.Delete a Particular Node
6.Update Node Value
7.Search Element
8.Display Linked List
9.Reverse Linked List
10.Exit
Enter your choice : Wrong choice
---------------------------------
Operations on singly linked list
---------------------------------
1.Insert Node at beginning
2.Insert node at last
3.Insert node at position
4.Sort Link List
5.Delete a Particular Node
6.Update Node Value
7.Search Element
8.Display Linked List
9.Reverse Linked List
10.Exit
Enter your choice : Wrong choice
---------------------------------
Operations on singly linked list
---------------------------------
1.Insert Node at beginning
2.Insert node at last
3.Insert node at position
4.Sort Link List
5.Delete a Particular Node
6.Update Node Value
7.Search Element
8.Display Linked List
9.Reverse Linked List
10.Exit
Enter your choice : Wrong choice
---------------------------------
Operations on singly linked list
---------------------------------
1.Insert Node at beginning
2.Insert node at last
3.Insert node at position
4.Sort Link List
5.Delete a Particular Node
6.Update Node Value
7.Search Element
8.Display Linked List
9.Reverse Linked List
10.Exit
Enter your choice : Wrong choice
---------------------------------
Operations on singly linked list
---------------------------------
1.Insert Node at beginning
2.Insert node at last
3.Insert node at position
4.Sort Link List
5.Delete a Particular Node
6.Update Node Value
7.Search Element
8.Display Linked List
9.Reverse Linked List
10.Exit
Enter your choice : Wrong choice
---------------------------------
Operations on singly linked list
---------------------------------
1.Insert Node at beginning
2.Insert node at last
3.Insert node at position
4.Sort Link List
5.Delete a Particular Node
6.Update Node Value
7.Search Element
8.Display Linked List
9.Reverse Linked List
10.Exit
Enter your choice : Wrong choice
---------------------------------
Operations on singly linked list
---------------------------------
1.Insert Node at beginning
2.Insert node at last
3.Insert node at position
4.Sort Link List
5.Delete a Particular Node
6.Update Node Value
7.Search Element
8.Display Linked List
9.Reverse Linked List
10.Exit
Enter your choice : Wrong choice
---------------------------------
Operations on singly linked list
---------------------------------
1.Insert Node at beginning
2.Insert node at last
3.Insert node at position
4.Sort Link List
5.Delete a Particular Node
6.Update Node Value
7.Search Element
8.Display Linked List
9.Reverse Linked List
10.Exit
Enter your choice : Wrong choice
---------------------------------
Operations on singly linked list
---------------------------------
1.Insert Node at beginning
2.Insert node at last
3.Insert node at position
4.Sort Link List
5.Delete a Particular Node
6.Update Node Value
7.Search Element
8.Display Linked List
9.Reverse Linked List
10.Exit
Enter your choice : Wrong choice





















