เราได้รับรายชื่อที่เชื่อมโยงโดยลำพัง และเราได้รับมอบหมายให้ลบโหนดสุดท้ายออกจากรายการนั้น ในปัญหานี้ เราจะเพียงแค่ข้ามผ่านรายการที่กำหนดและเพียงแค่ลบโหนดสุดท้ายออก
แนวทางในการหาทางออก
ในแนวทางนี้ เราจะดำเนินการตามรายการที่กำหนด และติดตามโหนดก่อนหน้าและโหนดปัจจุบัน ตอนนี้เมื่อโหนดปัจจุบันของเรากลายเป็นโหนดสุดท้าย เราจะเปลี่ยนก่อนหน้า -> ถัดจาก 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 และภาษาอื่นๆ เราหวังว่าคุณจะพบว่าบทความนี้มีประโยชน์