Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <stdlib.h>
- using namespace std;
- struct node {
- int data;
- node *next;
- } *head, *curr, *newNODE;
- int length;
- void listInitiate();
- void create_List(int);
- void show_List();
- void search_List(int);
- void insert_AT_first(int);
- void insert_after_value(int, int);
- void insert_before_value(int, int);
- void insert_between_values(int, int, int);
- void insert_AT_pos(int, int);
- void insert_AT_last(int);
- void delete_AT_first();
- void delete_after_value(int);
- void delete_before_value(int);
- void delete_between_values(int, int);
- void delete_AT_pos(int);
- void delete_AT_last();
- int main() {
- // decorate your-self.....
- }
- void listInitiate() {
- head = NULL;
- }
- void create_List(int n) {
- listInitiate();
- cout << "\nCreating a new list of size " << n << "." << endl; length = n;
- for (int i = 0; i < n; i++) {
- int item; cout << "\nElement " << i + 1 << ": "; cin >> item;
- newNODE = new node;
- newNODE->data = item;
- newNODE->next = NULL;
- if (head == NULL) {
- head = newNODE;
- curr = head;
- }
- else {
- curr->next = newNODE;
- curr = curr->next;
- }
- }
- }
- void show_List() {
- node *i; int l;
- if (head != NULL) {
- cout << "\nCurrently in the List, you have following elements: \n";
- for (i = head, l = 1; i != NULL; i = i->next, l++) {
- cout << "\nElement " << l << ": " << i->data << endl;
- }
- cout << "\nEnd of the list." << endl;
- }
- else cout << "\nYour list is empty." << endl;
- }
- void search_List(int item) {
- node *i; int l;
- for (i = head, l = 1; i->data != item && i->next != NULL; l++)
- i = i->next;
- if (i->data == item)
- cout << "\nElement found..! Position of first appearance in the list : " << l << endl;
- else cout << "\nSorry! Element isn't in the list." << endl;
- }
- void insert_AT_first(int item) {
- newNODE = new node;
- newNODE->data = item;
- newNODE->next = head;
- head = newNODE;
- cout << "\nElement " << item << " has been added as the new head of the list." << endl;
- }
- void insert_after_value(int value, int item) {
- node *i; int l;
- for (i = head, l = 1; i->data != value && i->next != NULL; l++)
- i = i->next;
- if (i->data == value) {
- newNODE = new node;
- newNODE->data = item;
- newNODE->next = i->next;
- i->next = newNODE;
- cout << "\nElement " << value << " has been found on the list at postion no: " << l
- << " and " << item << " has been added after " << value << " at position no: "
- << l + 1 << endl;
- }
- else {
- cout << "\nOPERATION failed..!" << endl;
- cout << "Searched for " << value << " among the " << l << " elements of the list but "
- << value << " could not be found." << endl;
- }
- }
- void insert_before_value(int value, int item) {
- node *i; int l;
- if (head->data == value) {
- insert_AT_first(item);
- cout << "\nElement " << value <<
- " has been found on the head so " << item << " has been added as the new head."
- << endl;
- }
- else {
- for (i = head, l = 1; i->next->data != value && i->next != NULL; l++)
- i = i->next;
- if (i->next->data == value) {
- newNODE = new node;
- newNODE->data = item;
- newNODE->next = i->next;
- i->next = newNODE;
- cout << "\nElement " << value << " has been found on the list at postion no: " << l + 1
- << " and " << item << " has been added before " << value << " at position no: "
- << l + 1 << endl;
- }
- else {
- cout << "\nOPERATION failed..!" << endl;
- cout << "Searched for " << value << " among the " << l << " elements of the list but "
- << value << " could not be found." << endl;
- }
- }
- }
- void insert_between_values(int val1, int val2, int item) {
- node *i; int l;
- for (i = head, l = 1; i->data != val1 && i->next != NULL; l++)
- i = i->next;
- if (i->data == val1 && i->next->data == val2) {
- newNODE = new node;
- newNODE->data = item;
- newNODE->next = i->next;
- i->next = newNODE;
- cout << "\nElement " << val1 << " has been found on the list at postion no: " << l
- << " and element " << val2 << " has been found on the list at positon no: " << l + 1
- << " So, " << item << " has been added between them at position no: " << l + 1 << endl;
- }
- else {
- cout << "\nOPERATION failed..!" << endl;
- cout << val1 << " and " << val2 << " couldn't be found sequencially." << endl;
- }
- }
- void insert_AT_pos(int position, int item) {
- node *i; int l;
- if (position == 1) {
- insert_AT_first(item);
- }
- else {
- for (i = head, l = 1; l != position - 1 && i->next != NULL; l++)
- i = i->next;
- if (l == position - 1) {
- newNODE = new node;
- newNODE->data = item;
- newNODE->next = i->next;
- i->next = newNODE;
- cout << "\nElement " << item << " has been added at the list at position no: "
- << l + 1 << endl;
- }
- else {
- cout << "\nOPERATION failed..!" << endl;
- cout << "\nGiven position is out of the range." << endl;
- }
- }
- }
- void insert_AT_last(int item) {
- node *i; int l;
- newNODE = new node;
- newNODE->data = item;
- newNODE->next = NULL;
- if (head == NULL) {
- head = newNODE;
- cout << "\nList was empty so, data " << item << " has been added at the list as the head."
- << endl;
- }
- else {
- for (i = head, l = 1; i->next != NULL; l++)
- i = i->next;
- i->next = newNODE;
- cout << "\nElement " << item << " has been added at the tail of the list at position no: "
- << l + 1 << endl;
- }
- }
- void delete_AT_first() {
- node *i = head;
- head = head->next;
- cout << "\nPrevious head " << i->data << " has been deleted." << endl;
- delete i;
- if (head != NULL)
- cout << "\nNew head value: " << head->data << endl;
- }
- void delete_after_value(int value) {
- node *i; int l;
- for (i = head, l = 1; i->data != value && i->next != NULL; l++)
- i = i->next;
- if (i->data == value && i->next != NULL) {
- newNODE = new node;
- newNODE = i->next;
- i->next = newNODE->next;
- newNODE->next = NULL;
- delete newNODE;
- cout << "\nElement " << value << " has been found at position no: " << l << " so, item at"
- << " position no: " << l + 1 << " has been deleted." << endl;
- }
- else if (i->data == value && i->next == NULL) {
- cout << "\nElement found at position no: " << l << ", which is the last element of the list."
- << " So, operation could not be done." << endl;
- }
- else {
- cout << "\nOPERATION Failed..!" << endl;
- cout << "\nGiven Value isn't in the list." << endl;
- }
- }
- void delete_before_value(int value) {
- if (head->data == value) {
- cout << "\nOperation Failed. No element exists before the head." << endl;
- }
- else if (head->next != NULL) {
- if (head->next->data == value)
- delete_AT_first();
- else if (head->next->next != NULL) {
- node *i; int l;
- for (i = head, l = 3; i->next->next->data != value && i->next->next->next != NULL; l++)
- i = i->next;
- if (i->next->next->data == value) {
- newNODE = new node;
- newNODE = i->next;
- i->next = newNODE->next;
- newNODE->next = NULL;
- delete newNODE;
- cout << "\nElement " << value << " has been found at position no: " << l << " therefore,"
- << " element at position no: " << l - 1 << " has been deleted." << endl;
- }
- else cout << "\nOperation Failed. Such element doesn't exist on the list." << endl;
- }
- else cout << "\nOperation Failed. Such element doesn't exist on the list." << endl;
- }
- else cout << "\nOperation Failed. Such element doesn't exist on the list." << endl;
- }
- void delete_between_values(int val1, int val2) {
- node *i; int l;
- for (i = head, l = 1; i->data != val1 && i->next != NULL; l++)
- i = i->next;
- if (i->data == val1 && i->next != NULL) {
- if (i->next->next != NULL && i->next->next->data == val2) {
- newNODE = new node;
- newNODE = i->next;
- i->next = i->next->next;
- newNODE->next = NULL;
- cout << "\nElement " << val1 << " has been found at position no: " << l << " and element "
- << val2 << " has been found at position no: " << l + 2 << " therefore, data "
- << newNODE->data << " has been deleted from position no: " << l + 1 << endl;
- }
- else cout << "\nNo such element exists between " << val1 << " and " << val2
- << " or may be " << val2 << " doesn't exist." << endl;
- }
- else cout << "\nEither " << val1 << " or " << val2 << " or both doesn't exist." << endl;
- }
- void delete_AT_pos(int position) {
- node *i; int l;
- if (position == 1)
- delete_AT_first();
- else {
- for (i = head, l = 1; l != position - 1 && i->next != NULL; l++)
- i = i->next;
- if (i->next == NULL)
- cout << "\nInvalid position." << endl;
- else {
- newNODE = new node;
- newNODE = i->next;
- i->next = newNODE->next;
- newNODE->next = NULL;
- cout << "\nElement at position no: " << position << " is " << newNODE->data << " and just got"
- << " deleted." << endl;
- delete newNODE;
- }
- }
- }
- void delete_AT_last() {
- node *i; int l;
- if (head->next == NULL)
- delete_AT_first();
- else {
- for (i = head, l = 1; i->next->next != NULL; l++)
- i = i->next;
- newNODE = new node;
- newNODE = i->next;
- i->next = NULL;
- cout << "\nLast element of the list was " << newNODE->data << " which was at position no: "
- << l + 1 << " and just got deleted." << endl;
- delete newNODE;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement