Doubly_Linked_List_Algorithms (1)
Doubly_Linked_List_Algorithms (1)
Insert at Beginning
Algorithm:
1. Create a new node.
2. Set newNode->next to head.
3. Set newNode->prev to NULL.
4. If head is not NULL, set head->prev = newNode.
5. Set head = newNode.
Code:
void insertAtBeginning(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->prev = NULL;
newNode->next = head;
if (head != NULL)
head->prev = newNode;
head = newNode;
}
Insert at End
Algorithm:
1. Create a new node.
2. If list is empty, set head = newNode.
3. Else, traverse to last node.
4. Set last->next = newNode, newNode->prev = last.
Code:
void insertAtEnd(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
Node* temp = head;
newNode->data = data;
newNode->next = NULL;
if (head == NULL) {
newNode->prev = NULL;
head = newNode;
return;
}
temp->next = newNode;
newNode->prev = temp;
}
Algorithm:
1. If list is empty, return.
2. Store head in temp.
3. Move head to head->next.
4. Free temp.
Code:
void deleteFromBeginning() {
if (head == NULL) return;
free(temp);
}
Algorithm:
1. If list is empty, return.
2. If only one node, free it and set head to NULL.
3. Else, traverse to last node.
4. Update secondLast->next = NULL.
5. Free last node.
Code:
void deleteFromEnd() {
if (head == NULL) return;
if (head->next == NULL) {
free(head);
head = NULL;
return;
}
temp->prev->next = NULL;
free(temp);
}
Traversal (Forward)
Algorithm:
1. Start from head.
2. Print data while moving through next.
Code:
void displayForward() {
Node* temp = head;
while (temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
}
}
Traversal (Backward)
Algorithm:
1. Go to last node.
2. Print data while moving through prev.
Code:
void displayBackward() {
Node* temp = head;
if (temp == NULL) return;