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

ลบรายการกลางที่เชื่อมโยงใน C ++ หรือไม่


ขั้นแรกให้เรากำหนดรายการเชื่อมโยงที่มีข้อมูลและตัวชี้ไปยังโหนดถัดไป

struct Node {
   int data;
   struct Node* next;
};

ต่อไป เราสร้างฟังก์ชัน createNode(int data) ที่รับข้อมูล int เป็นพารามิเตอร์และส่งกลับโหนดที่สร้างขึ้นใหม่หลังจากกำหนดค่าพารามิเตอร์ ตัวชี้ถัดไปที่โหนดจะเป็นโมฆะ

Node* createNode(int data){
   struct Node* newNode = new Node;
   newNode->data = data;
   newNode->next = NULL;
   return newNode;
}

ตอนนี้เรามีฟังก์ชั่น deleteMiddle(struct Node* head) ซึ่งรับรูทโหนด หากโหนดรูทไม่เป็นค่าว่าง มันก็จะกำหนดค่าถัดไปของโหนดก่อนหน้าถึงค่ากลางให้กับโหนดที่อยู่ถัดจากค่าตรงกลางและส่งกลับค่า temphead ซึ่งเป็นส่วนหัวที่แก้ไข

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