প্রথমে লিংকড লিস্ট সংজ্ঞায়িত করা হয় যাতে থাকে ডেটা এবং নেক্সট নোডের পয়েন্টার।
struct Node {
int data;
struct Node* next;
};
createNode(int data) ফাংশন ইন্টিজার ডেটা নিয়ে নতুন নোড তৈরি করে এবং রিটার্ন করে। নেক্সট পয়েন্টার নাল থাকে।
Node* createNode(int data) {
struct Node* newNode = new Node;
newNode->data = data;
newNode->next = NULL;
return newNode;
}
deleteMiddle(struct Node* head) ফাংশন রুট নোড নেয়। যদি রুট নাল না হয় তবে মাঝপথের নোডের আগের নোডের নেক্সট মানকে মাঝপথের নোডের পরের নোডের মান দিয়ে আপডেট করে এবং মডিফাইড হেড রিটার্ন করে।
struct Node* deleteMiddle(struct Node* head) {
if (head == NULL)
return NULL;
if (head->next == NULL) {
delete head;
return NULL;
}
Node* temphead = head;
int count = nodeCount(head);
int mid = count / 2;
while (mid-- > 1) {
head = head->next;
}
head->next = head->next->next;
return temphead;
}
printList(Node* ptr) ফাংশন লিস্ট হেড নিয়ে লিস্ট প্রিন্ট করে।
void printList(Node* ptr) {
while (ptr != NULL) {
cout << ptr->data << "->";
ptr = ptr->next;
}
cout << "NULL" << endl;
}
উদাহরণ
#include <iostream>
using namespace std;
struct Node {
int data;
struct Node* next;
};
Node* createNode(int data) {
struct Node* newNode = new Node;
newNode->data = data;
newNode->next = NULL;
return newNode;
}
int nodeCount(struct Node* head) {
int count = 0;
while (head != NULL) {
head = head->next;
count++;
}
return count;
}
struct Node* deleteMiddle(struct Node* head) {
if (head == NULL)
return NULL;
if (head->next == NULL) {
delete head;
return NULL;
}
Node* temphead = head;
int count = nodeCount(head);
int mid = count / 2;
while (mid-- > 1) {
head = head->next;
}
head->next = head->next->next;
return temphead;
}
void printList(Node* ptr) {
while (ptr != NULL) {
cout << ptr->data << "->";
ptr = ptr->next;
}
cout << "NULL" << endl;
}
int main() {
struct Node* head = createNode(2);
head->next = createNode(4);
head->next->next = createNode(6);
head->next->next->next = createNode(8);
head->next->next->next->next = createNode(10);
cout << "Original linked list" << endl;
printList(head);
head = deleteMiddle(head);
cout << endl;
cout << "After deleting the middle of the linked list" << endl;
printList(head);
return 0;
}
আউটপুট
Original linked list 2->4->6->8->10->NULL After deleting the middle of the linked list 2->4->8->10->NULL