0% found this document useful (0 votes)
10 views

Implementaion of Double LinkList

Uploaded by

Alishba Amir
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
10 views

Implementaion of Double LinkList

Uploaded by

Alishba Amir
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 7

// C++ program to implement all functions

// used in Doubly Linked List

#include <iostream>
#include <stdlib.h>
using namespace std;

int i = 0;

// Node for Doubly Linked List


typedef struct node {
int key;
struct node* prev;
struct node* next;

} node;

// Head, Tail, first & temp Node


node* head = NULL;
node* first = NULL;
node* temp = NULL;
node* tail = NULL;

// Function to add a node in the


// Doubly Linked List
void addnode(int k)
{

// Allocating memory
// to the Node ptr
node* ptr
= (node*)malloc(sizeof(node));

// Assign Key to value k


ptr->key = k;

// Next and prev pointer to NULL


ptr->next = NULL;
ptr->prev = NULL;

// If Linked List is empty


if (head == NULL) {
head = ptr;
first = head;
tail = head;
}

// Else insert at the end of the


// Linked List
else {
temp = ptr;
first->next = temp;
temp->prev = first;
first = temp;
tail = temp;
}

// Increment for number of Nodes


// in the Doubly Linked List
i++;
}

// Function to traverse the Doubly


// Linked List
void traverse()
{
// Nodes points towards head node
node* ptr = head;

// While pointer is not NULL,


// traverse and print the node
while (ptr != NULL) {

// Print key of the node


cout <<" " << ptr->key;
ptr = ptr->next;
}

cout <<"\n";
}

// Function to insert a node at the


// beginning of the linked list
void insertatbegin(int k)
{

// Allocating memory
// to the Node ptr
node* ptr
= (node*)malloc(sizeof(node));

// Assign Key to value k


ptr->key = k;

// Next and prev pointer to NULL


ptr->next = NULL;
ptr->prev = NULL;

// If head is NULL
if (head == NULL) {
first = ptr;
first = head;
tail = head;
}

// Else insert at beginning and


// change the head to current node
else {
temp = ptr;
temp->next = head;
head->prev = temp;
head = temp;
}
i++;
}

// Function to insert Node at end


void insertatend(int k)
{

// Allocating memory
// to the Node ptr
node* ptr
= (node*)malloc(sizeof(node));

// Assign Key to value k


ptr->key = k;

// Next and prev pointer to NULL


ptr->next = NULL;
ptr->prev = NULL;

// If head is NULL
if (head == NULL) {
first = ptr;
first = head;
tail = head;
}

// Else insert at the end


else {
temp = ptr;
temp->prev = tail;
tail->next = temp;
tail = temp;
}
i++;
}

// Function to insert Node at any


// position pos
void insertatpos(int k, int pos)
{

// For Invalid Position


if (pos < 1 || pos > i + 1) {
cout <<"Please enter a"
" valid position\n";
}

// If position is at the front,


// then call insertatbegin()
else if (pos == 1) {
insertatbegin(k);
}

// Position is at length of Linked


// list + 1, then insert at the end
else if (pos == i + 1) {
insertatend(k);
}

// Else traverse till position pos


// and insert the Node
else {
node* src = head;

// Move head pointer to pos


while (pos--) {
src = src->next;
}

// Allocate memory to new Node


node **da, **ba;
node* ptr
= (node*)malloc(
sizeof(node));
ptr->next = NULL;
ptr->prev = NULL;
ptr->key = k;

// Change the previous and next


// pointer of the nodes inserted
// with previous and next node
ba = &src;
da = &(src->prev);
ptr->next = (*ba);
ptr->prev = (*da);
(*da)->next = ptr;
(*ba)->prev = ptr;
i++;
}
}

// Function to delete node at the


// beginning of the list
void delatbegin()
{
// Move head to next and
// decrease length by 1
head = head->next;
i--;
}

// Function to delete at the end


// of the list
void delatend()
{
// Mode tail to the prev and
// decrease length by 1
tail = tail->prev;
tail->next = NULL;
i--;
}
// Function to delete the node at
// a given position pos
void delatpos(int pos)
{

// If invalid position
if (pos < 1 || pos > i + 1) {
cout <<"Please enter a"
" valid position\n";
}

// If position is 1, then
// call delatbegin()
else if (pos == 1) {
delatbegin();
}

// If position is at the end, then


// call delatend()
else if (pos == i) {
delatend();
}

// Else traverse till pos, and


// delete the node at pos
else {
// Src node to find which
// node to be deleted
node* src = head;
pos--;

// Traverse node till pos


while (pos--) {
src = src->next;
}

// previous and after node


// of the src node
node **pre, **aft;
pre = &(src->prev);
aft = &(src->next);

// Change the next and prev


// pointer of pre and aft node
(*pre)->next = (*aft);
(*aft)->prev = (*pre);

// Decrease the length of the


// Linked List
i--;
}
}

// Driver Code
int main()
{
// Adding node to the linked List
addnode(2);
addnode(4);
addnode(9);
addnode(1);
addnode(21);
addnode(22);

// To print the linked List


cout <<"Linked List: ";
traverse();

cout <<"\n";

// To insert node at the beginning


insertatbegin(1);
cout <<"Linked List after"
" inserting 1 "
"at beginning: ";
traverse();

// To insert at the end


insertatend(0);
cout <<"Linked List after "
"inserting 0 at end: ";
traverse();

// To insert Node with


// value 44 after 3rd Node
insertatpos(44, 3);
cout <<"Linked List after "
"inserting 44 "
"after 3rd Node: ";
traverse();

cout <<"\n";

// To delete node at the beginning


delatbegin();
cout <<"Linked List after "
"deleting node "
"at beginning: ";
traverse();

// To delete at the end


delatend();
cout <<"Linked List after "
"deleting node at end: ";
traverse();

// To delete Node at position 5


cout <<"Linked List after "
"deleting node "
"at position 5: ";
delatpos(5);
traverse();

return 0;
}

You might also like