0% found this document useful (0 votes)
27 views7 pages

Implementaion of Double LinkList

Uploaded by

Alishba Amir
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
27 views7 pages

Implementaion of Double LinkList

Uploaded by

Alishba Amir
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
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