ASSIGNMENT #1
Name : Muhammad Ismail
Roll no : 30220
Dept. : BS-SE (3rd) A
Subject : Data Structure & Algorithm
Submitted to : Sir Dr Shahzad Akbar
.SINGLE WAY LINK LIST
#include <iostream>
using namespace std;
// Node structure for singly linked list
struct Node {
int data;
Node* next;
};
// Function to create a new node
Node* createNode(int data) {
Node* newNode = new Node();
newNode->data = data;
newNode->next = nullptr;
return newNode;
}
// Function to insert a node at the end of the list
void insertEnd(Node*& head, int data) {
Node* newNode = createNode(data);
if (head == nullptr) {
head = newNode;
} else {
Node* temp = head;
while (temp->next != nullptr) {
temp = temp->next;
}
temp->next = newNode;
}
}
// Function to delete a node by value
void deleteNode(Node*& head, int data) {
if (head == nullptr) {
cout << "List is empty.\n";
return;
}
if (head->data == data) {
Node* temp = head;
head = head->next;
delete temp;
return;
}
Node* temp = head;
while (temp->next != nullptr && temp->next->data != data) {
temp = temp->next;
}
if (temp->next == nullptr) {
cout << "Node with value " << data << " not found.\n";
} else {
Node* toDelete = temp->next;
temp->next = temp->next->next;
delete toDelete;
}
}
// Function to display the list
void displayList(Node* head) {
if (head == nullptr) {
cout << "List is empty.\n";
return;
}
Node* temp = head;
while (temp != nullptr) {
cout << temp->data << " ";
temp = temp->next;
}
cout << endl;
}
// Main function to test the singly linked list
int main() {
Node* head = nullptr;
// Inserting nodes into the list
insertEnd(head, 10);
insertEnd(head, 20);
insertEnd(head, 30);
insertEnd(head, 40);
// Display the list
cout << "Singly Linked List: ";
displayList(head);
// Deleting a node
deleteNode(head, 20);
cout << "After deleting 20: ";
displayList(head);
deleteNode(head, 50); // Node not found
cout << "After attempting to delete 50: ";
displayList(head);
return 0;
}
2. Doubly Linked List (Two Way Linked List)
cpp
Copy
#include <iostream>
using namespace std;
// Node structure for doubly linked list
struct Node {
int data;
Node* next;
Node* prev;
};
// Function to create a new node
Node* createNode(int data) {
Node* newNode = new Node();
1. Singly Linked List (One Way Linked List)
cpp
Copy
#include <iostream>
using namespace std;
// Node structure for singly linked list
struct Node {
int data;
Node* next;
};
// Function to create a new node
Node* createNode(int data) {
Node* newNode = new Node();
newNode->data = data;
newNode->next = nullptr;
return newNode;
}
// Function to insert a node at the end of the list
void insertEnd(Node*& head, int data) {
Node* newNode = createNode(data);
if (head == nullptr) {
head = newNode;
} else {
Node* temp = head;
while (temp->next != nullptr) {
temp = temp->next;
}
temp->next = newNode;
}
}
// Function to delete a node by value
void deleteNode(Node*& head, int data) {
if (head == nullptr) {
cout << "List is empty.\n";
return;
}
if (head->data == data) {
Node* temp = head;
head = head->next;
delete temp;
return;
}
Node* temp = head;
while (temp->next != nullptr && temp->next->data != data) {
temp = temp->next;
}
if (temp->next == nullptr) {
cout << "Node with value " << data << " not found.\n";
} else {
Node* toDelete = temp->next;
temp->next = temp->next->next;
delete toDelete;
}
}
// Function to display the list
void displayList(Node* head) {
if (head == nullptr) {
cout << "List is empty.\n";
return;
}
Node* temp = head;
while (temp != nullptr) {
cout << temp->data << " ";
temp = temp->next;
}
cout << endl;
}
// Main function to test the singly linked list
int main() {
Node* head = nullptr;
// Inserting nodes into the list
insertEnd(head, 10);
insertEnd(head, 20);
insertEnd(head, 30);
insertEnd(head, 40);
// Display the list
cout << "Singly Linked List: ";
displayList(head);
// Deleting a node
deleteNode(head, 20);
cout << "After deleting 20: ";
displayList(head);
deleteNode(head, 50); // Node not found
cout << "After attempting to delete 50: ";
displayList(head);
return 0;
}
2. Doubly Linked List (Two Way Linked List)
cpp
Copy
#include <iostream>
using namespace std;
// Node structure for doubly linked list
struct Node {
int data;
Node* next;
Node* prev;
};
// Function to create a new node
Node* createNode(int data) {
Node* newNode = new Node();
newNode->data = data;
newNode->next = nullptr;
newNode->prev = nullptr;
return newNode;
}
// Function to insert a node at the end of the list
void insertEnd(Node*& head, int data) {
Node* newNode = createNode(data);
if (head == nullptr) {
head = newNode;
} else {
Node* temp = head;
while (temp->next != nullptr) {
temp = temp->next;
}
temp->next = newNode;
newNode->prev = temp;
}
}
// Function to delete a node by value
void deleteNode(Node*& head, int data) {
if (head == nullptr) {
cout << "List is empty.\n";
return;
}
Node* temp = head;
// If the node to be deleted is the head
if (head->data == data) {
head = head->next;
if (head != nullptr) {
head->prev = nullptr;
}
delete temp;
return;
}
// Traverse to find the node to delete
while (temp != nullptr && temp->data != data) {
temp = temp->next;
}
if (temp == nullptr) {
cout << "Node with value " << data << " not found.\n";
return;
}
// Update the pointers
if (temp->next != nullptr) {
temp->next->prev = temp->prev;
}
if (temp->prev != nullptr) {
temp->prev->next = temp->next;
}
delete temp;
}
// Function to display the list from head to tail
void displayList(Node* head) {
if (head == nullptr) {
cout << "List is empty.\n";
return;
}
Node* temp = head;
while (temp != nullptr) {
cout << temp->data << " ";
temp = temp->next;
}
cout << endl;
}
// Function to display the list from tail to head
void displayReverse(Node* head) {
if (head == nullptr) {
cout << "List is empty.\n";
return;
}
Node* temp = head;
while (temp->next != nullptr) {
temp = temp->next;
}
// Traverse the list backward
while (temp != nullptr) {
cout << temp->data << " ";
temp = temp->prev;
}
cout << endl;
}
// Main function to test the doubly linked list
int main() {
Node* head = nullptr;
// Inserting nodes into the list
insertEnd(head, 10);
insertEnd(head, 20);
insertEnd(head, 30);
insertEnd(head, 40);
// Display the list
cout << "Doubly Linked List: ";
displayList(head);
// Display list in reverse order
cout << "Doubly Linked List (Reversed): ";
displayReverse(head);
// Deleting a node
deleteNode(head, 20);
cout << "After deleting 20: ";
displayList(head);
deleteNode(head, 50); // Node not found
cout << "After attempting to delete 50: ";
displayList(head);
return 0;
}