From 62da3ac3ca63975133413b89b38f76ecad6ae797 Mon Sep 17 00:00:00 2001 From: Pranav Ojha Date: Thu, 12 Oct 2023 11:01:33 +0530 Subject: [PATCH] doubly linked list --- C++/doublylinkedlist.cpp | 150 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 C++/doublylinkedlist.cpp diff --git a/C++/doublylinkedlist.cpp b/C++/doublylinkedlist.cpp new file mode 100644 index 0000000..9c16aad --- /dev/null +++ b/C++/doublylinkedlist.cpp @@ -0,0 +1,150 @@ +#include +using namespace std; + +class Node +{ +public: + int data; + Node *prev; + Node *next; + Node(int x) + { + data = x; + next = NULL; + prev = NULL; + } +}; + +Node *insert() +{ + int n; + cin >> n; + Node *p, *head; + for (int i = 0; i < n; i++) + { + int x; + cin >> x; + Node *temp = new Node(x); + + if (i == 0) + { + head = temp; + p = head; + } + else + { + temp->prev = p; + p->next = temp; + p = p->next; + } + } + return head; +} + +Node *insertfront(Node *head) +{ + int data; + cin >> data; + Node *temp = new Node(data); + temp->next = head; + head->prev = temp; + head = temp; + return head; +} + +Node *insertEnd(Node *head) +{ + int data; + cin >> data; + Node *temp = new Node(data); + if (head == NULL) + { + head = temp; + } + Node *p = head; + while (p->next != NULL) + { + p = p->next; + } + p->next = temp; + temp->prev = p; + return head; +} + +Node *reverse(Node *head) +{ + Node *temp = NULL; + Node *curr = head; + while (curr != NULL) + { + temp = curr->prev; + curr->prev = curr->next; + curr->next = temp; + curr = curr->prev; + } + if (temp != NULL) + head = temp->prev; + return head; +} + +Node *deleteFirst(Node *head) +{ + Node *p = head; + if (head == NULL || head->next == NULL) + { + return NULL; + } + head = p->next; + delete p; + head->prev = NULL; + return head; +} + +Node *deleteEnd(Node *head) +{ + Node *p; + if (head == NULL || head->next == NULL) + { + return NULL; + } + p = head; + while (p->next != NULL) + { + p = p->next; + } + p->prev->next = NULL; + delete p; + return head; +} + +void printList(Node *head) +{ + Node *p = head; + while (p != NULL) + { + cout << p->data << " "; + p = p->next; + } +} + +int main() +{ + Node *head = insert(); + printList(head); + cout << endl; + head = insertfront(head); + printList(head); + cout << endl; + head = insertEnd(head); + printList(head); + cout << endl; + head = reverse(head); + printList(head); + cout << endl; + head = deleteFirst(head); + printList(head); + cout << endl; + head = deleteEnd(head); + printList(head); + return 0; +} \ No newline at end of file