ขั้นแรกให้เรากำหนดรายการเชื่อมโยงที่มีข้อมูลและตัวชี้ไปยังโหนดถัดไป
struct Node {
int data;
struct Node* next;
}; จากนั้นเราสร้างฟังก์ชัน createList(Node ** headPtr, int new_data) ซึ่งนำ doublePointer ไปยังโหนดและค่า int ภายในฟังก์ชันเรากำหนดโหนดที่สร้างขึ้นใหม่ตัวชี้ถัดไปให้กับ headptr จากนั้นจึงกำหนด headptr ให้กับโหนดที่สร้างขึ้นใหม่
void createList(Node ** headPtr, int new_data){
Node* newNode = new Node();
newNode->data = new_data;
newNode->next = (*headPtr);
(*headPtr) = newNode;
} วิธี deleteNnodesAfterM(Node *head, int M, int N) รับโหนดรูทและค่า M และ N ข้างในเรากำหนด Node* ปัจจุบันให้กับส่วนหัวและประกาศ Node *t.
void deleteNnodesAfterM(Node *head, int M, int N){
Node *current = head, *t;
int nodeCount; ภายในฟังก์ชันเรามี while loop ซึ่งทำงานในขณะที่กระแสไม่ชี้ไปที่ค่าว่าง ครั้งแรกสำหรับลูปรันสำหรับการวนซ้ำ M หลังจากลูปแรกเสร็จสิ้นการดำเนินการ ปัจจุบัน ตัวชี้ชี้ไปที่โหนดหลัง M ในรายการที่เชื่อมโยง จากนั้นโหนด *t จะถูกกำหนดค่าปัจจุบัน -> ถัดไป ซึ่งเป็นค่าแรกที่จะลบ
while (current){
for (nodeCount = 1; nodeCount < M && current!= NULL; nodeCount++)
current = current->next;
if (current == NULL)
return;
t = current->next; วินาทีสำหรับลูปรันสำหรับการวนซ้ำ N และทำให้จำนวนโหนด N ว่างจากตำแหน่งเริ่มต้น ปัจจุบัน -> ถัดไปถูกกำหนดให้กับ t และ t กลายเป็นโหนดปัจจุบันของเรา
for (nodeCount = 1; nodeCount<=N && t!= NULL; nodeCount++){
Node *temp = t;
t = t->next;
free(temp);
}
current->next = t;
current = t; สุดท้าย printList(Node *head) ซึ่งใช้ตัวชี้ส่วนหัวจะพิมพ์รายการที่เชื่อมโยง
void printList(Node *head){
Node *temp = head;
while (temp != NULL){
cout<<temp->data<<" ";
temp = temp->next;
}
cout<<endl;
} ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อลบโหนด N หลังจากโหนด M ของรายการที่เชื่อมโยง -
#include <iostream>
using namespace std;
struct Node{
int data;
Node *next;
};
void createList(Node ** headPtr, int new_data){
Node* newNode = new Node();
newNode->data = new_data;
newNode->next = (*headPtr);
(*headPtr) = newNode;
}
void printList(Node *head){
Node *temp = head;
while (temp != NULL){
cout<<temp->data<<" ";
temp = temp->next;
}
cout<<endl;
}
void deleteNnodesAfterM(Node *head, int M, int N){
Node *current = head, *t;
int nodeCount;
while (current){
for (nodeCount = 1; nodeCount < M && current!= NULL; nodeCount++)
current = current->next;
if (current == NULL)
return;
t = current->next;
for (nodeCount = 1; nodeCount<=N && t!= NULL; nodeCount++){
Node *temp = t;
t = t->next;
free(temp);
}
current->next = t;
current = t;
}
}
int main(){
Node* head = NULL;
int M=2, N=2;
createList(&head, 2);
createList(&head, 4);
createList(&head, 6);
createList(&head, 8);
createList(&head, 10);
createList(&head, 12);
createList(&head, 14);
cout << "M = " << M<< " N = " << N<<endl;
cout<< "Original linked list :"<<endl;
printList(head);
deleteNnodesAfterM(head, M, N);
cout<<"Linked list after deletion :"<<endl;
printList(head);
return 0;
} ผลลัพธ์
รหัสข้างต้นจะสร้างผลลัพธ์ต่อไปนี้ -
M = 2 N = 2 Original linked list : 14 12 10 8 6 4 2 Linked list after deletion : 14 12 6 4