Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ลบรายการกลางของลิงค์ในโปรแกรม C++


ในบทช่วยสอนนี้ เราจะเรียนรู้วิธีลบโหนดกลางในรายการที่เชื่อมโยง

วิธีแก้ปัญหาตรงไปตรงมา เราจะมีตัวชี้สองตัว ตัวหนึ่งย้ายหนึ่งโหนดในแต่ละครั้ง และอีกตัวหนึ่งย้ายสองโหนดในแต่ละครั้ง เมื่อตัวชี้ที่สองไปถึงโหนดสุดท้าย ตัวแรกจะอยู่ตรงกลางของรายการที่เชื่อมโยง

มาดูขั้นตอนการแก้ปัญหากัน

  • เขียน struct Node สำหรับโหนดรายการที่เชื่อมโยง

  • เริ่มต้นรายการที่เชื่อมโยงด้วยข้อมูลจำลอง

  • เขียนฟังก์ชันเพื่อลบรายการที่เชื่อมโยง

    • เริ่มต้นตัวชี้สองตัว (ช้าและเร็ว) ด้วยตัวชี้ส่วนหัวของรายการที่เชื่อมโยง

    • วนซ้ำในรายการที่เชื่อมโยงจนกว่าตัวชี้แบบเร็วจะถึงจุดสิ้นสุด

    • ย้ายตัวชี้ช้าไปยังโหนดถัดไป

    • ย้ายตัวชี้แบบเร็วไปยังโหนดถัดไปของโหนดถัดไป

    • กลับหัวชี้

  • พิมพ์รายการที่เชื่อมโยง

ตัวอย่าง

มาดูโค้ดกันเลย

#include <bits/stdc++.h>
using namespace std;
struct Node {
   int data;
   struct Node* next;
};
struct Node* deleteMiddleNode(struct Node* head) {
   if (head == NULL) {
      return NULL;
   }
   if (head->next == NULL) {
      delete head;
      return NULL;
   }
   struct Node* slow_ptr = head;
   struct Node* fast_ptr = head;
   struct Node* prev;
   while (fast_ptr != NULL && fast_ptr->next != NULL) {
      fast_ptr = fast_ptr->next->next;
      prev = slow_ptr;
      slow_ptr = slow_ptr->next;
   }
   prev->next = slow_ptr->next;
   delete slow_ptr;
   return head;
}
void printLinkedList(struct Node* node) {
   while (node != NULL) {
      cout << node->data << " -> ";
      node = node->next;
   }
   cout << "Null" << endl;
}
Node* newNode(int data) {
   struct Node* temp = new Node;
   temp->data = data;
   temp->next = NULL;
   return temp;
}
int main() {
   struct Node* head = newNode(1);
   head->next = newNode(2);
   head->next->next = newNode(3);
   head->next->next->next = newNode(4);
   head->next->next->next->next = newNode(5);
   head->next->next->next->next->next = newNode(6);
   cout << "Linked list before deleting middle node: ";
   printLinkedList(head);
   head = deleteMiddleNode(head);
   cout << "Linked List after deleting middle node: ";
   printLinkedList(head);
   return 0;
}

ผลลัพธ์

หากคุณรันโปรแกรมข้างต้น คุณจะได้ผลลัพธ์ดังต่อไปนี้

Linked list before deleting middle node: 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> Null
Linked List after deleting middle node: 1 -> 2 -> 3 -> 5 -> 6 -> Null

บทสรุป

หากคุณมีข้อสงสัยใดๆ ในบทแนะนำ โปรดระบุในส่วนความคิดเห็น