เราได้รับรายชื่อที่เชื่อมโยงโดยลำพัง และเราได้รับมอบหมายให้ลบโหนดสุดท้ายออกจากรายการนั้น ในปัญหานี้ เราจะเพียงแค่ข้ามผ่านรายการที่กำหนดและเพียงแค่ลบโหนดสุดท้ายออก
แนวทางในการหาทางออก
ในแนวทางนี้ เราจะดำเนินการตามรายการที่กำหนด และติดตามโหนดก่อนหน้าและโหนดปัจจุบัน ตอนนี้เมื่อโหนดปัจจุบันของเรากลายเป็นโหนดสุดท้าย เราจะเปลี่ยนก่อนหน้า -> ถัดจาก NULL และลบโหนดปัจจุบัน
ตัวอย่าง
#include <iostream>
using namespace std;
struct Node {
int data;
struct Node* next;
};
void push(struct Node** ref, int new_data) { // pushing the node
struct Node* new_n = new Node;
new_n->data = new_data;
new_n->next = (*ref);
(*ref) = new_n;
}
int main() {
Node* head = NULL;
push(&head, 12);
push(&head, 29);
push(&head, 11);
push(&head, 23);
push(&head, 8);
auto curr = head, prev = head;
if (!curr || !curr -> next) // if list only has one element or the list is empty
cout << "Empty\n";
else {
while (curr) { // while curr != NULL
if (!curr -> next) {
prev -> next = NULL;
delete(curr); // freeing the space
break;
}
prev = curr;
curr = curr -> next; // moving to the next node
}
}
for (Node* temp = head; temp != NULL; temp = temp->next) // printing the data
cout << temp->data << " ";
return 0;
} ผลลัพธ์
8 23 11 29
คำอธิบายของโค้ดด้านบน
ในแนวทางนี้ เราสำรวจผ่านอาร์เรย์ เพื่อติดตามโหนดปัจจุบันและโหนดก่อนหน้า ตอนนี้เมื่อโหนดปัจจุบันของเรากลายเป็นโหนดสุดท้าย เราจะเปลี่ยนก่อนหน้า -> ถัดจาก NULL และลบโหนดปัจจุบัน ความซับซ้อนของเวลาโดยรวมของโปรแกรมที่กำหนดคือ O(N) โดยที่ N คือขนาดของรายการที่เรากำหนด
ความซับซ้อนของเวลา - O(N)
N:ขนาดของอาร์เรย์ของเรา
บทสรุป
ในบทความนี้ เราแก้ปัญหาในการลบโหนดสุดท้ายออกจากรายการเชื่อมโยงที่กำหนด นอกจากนี้เรายังได้เรียนรู้โปรแกรม C++ สำหรับปัญหานี้และแนวทางทั้งหมดที่เราแก้ไข เราสามารถเขียนโปรแกรมเดียวกันในภาษาอื่นๆ เช่น C, java, python และภาษาอื่นๆ เราหวังว่าคุณจะพบว่าบทความนี้มีประโยชน์