รายการที่เชื่อมโยงเป็นโครงสร้างข้อมูลเชิงเส้นที่มีโหนดและแต่ละโหนดมีสองฟิลด์ หนึ่งคือค่าหรือข้อมูลที่จะแทรกและฟิลด์อื่นเก็บที่อยู่ของโหนดถัดไป
งานของเราคือการลบโหนดออกจากจุดสิ้นสุดของรายการที่เชื่อมโยง โหนดสุดท้ายเรียกว่าโหนดท้าย หากไม่มีโหนดในรายการที่เชื่อมโยง ให้คืนค่า NULL
ตัวอย่างเช่น −
อินพุต 1 − 1 → 2 → 3 → 4 → 5
ผลผลิต − 1 → 2 → 3 → 4 →
คำอธิบาย - ในรายการที่เชื่อมโยงโดยลำพังที่กำหนด โหนดจากจุดสิ้นสุดคือ '5' หลังจากลบโหนดสุดท้ายแล้ว เอาต์พุตจะเป็น 1 → 2 → 3 → 4 →
อินพุต 2 − 5 → 8 →3
ผลผลิต − 5 → 8 →
คำอธิบาย - ในรายการที่เชื่อมโยงโดยลำพังที่กำหนด โหนดจากจุดสิ้นสุดคือ '3' หลังจากลบโหนดออกจากจุดสิ้นสุด ผลลัพธ์จะเป็น 5 →8 →.
แนวทางการแก้ปัญหานี้
วิธีง่ายๆ ในการแก้ปัญหานี้คือการสร้างโหนดก่อนหน้าที่เก็บค่าของโหนดปัจจุบันในภายหลังเมื่อตัวชี้ปัจจุบันจะชี้ไปที่โหนดสุดท้ายของรายการที่เชื่อมโยง
วนซ้ำทุกโหนดของรายการที่เชื่อมโยงหากโหนดปัจจุบันชี้ไปที่โหนดสุดท้าย และสุดท้าย กลับจากรายการที่เชื่อมโยง
-
เริ่มต้นรายการที่เชื่อมโยงโดยการแทรกโหนดเข้าไป
-
ฟังก์ชัน insertAtFirst(node*&head, int data) จะแทรกโหนดทั้งหมดในรายการที่เชื่อมโยง
-
ฟังก์ชัน deleteAtTail(node*head) ใช้ตัวชี้ที่กำลังชี้ไปที่ส่วนหัว
-
สร้างตัวชี้โหนดก่อนหน้าและเริ่มต้นเป็น NULL
-
สร้างตัวชี้โหนดชั่วคราวซึ่งกำลังชี้ไปที่ส่วนหัวของตัวชี้
-
เลื่อนไปตามตัวชี้ชั่วคราวจนกว่าจะไปไม่สุดของรายการที่เชื่อมโยง
-
เก็บค่าของตัวชี้ชั่วคราวในพอยน์เตอร์ของโหนดก่อนหน้า
-
ลบตัวชี้ชั่วคราว
-
กลับรายการเชื่อมโยง
ตัวอย่าง
#include<iostream> using namespace std; class node{ public: int data; node*next; node(int d){ data=d; node*next= NULL; } }; void insertAtFirst(node*&head, int data){ node*n= new node(data); n->next= head; head=n; } void printNode(node*head){ while(head!=NULL){ cout<<head->data<<"->"; head=head->next; } cout<<endl; } void deleteatTail(node*head){ node*prev= NULL; node*temp= head; while(temp->next!=NULL){ prev= temp; temp=temp->next; } delete temp; prev->next= NULL; return; } int main(){ node*head= NULL; insertAtFirst(head,5); insertAtFirst(head,4); insertAtFirst(head,3); insertAtFirst(head,2); insertAtFirst(head,1); deleteatTail(head); printNode(head); }
ผลลัพธ์
การเรียกใช้โค้ดด้านบนจะสร้างผลลัพธ์เป็น
1→2→3→4→
ในรายการเชื่อมโยงเดี่ยวอินพุตที่กำหนด 1 → 2 → 3 → 4 → 5 โหนดสุดท้ายของรายการที่เชื่อมโยงคือ '5' ดังนั้น หลังจากลบโหนดสุดท้าย รายการที่เชื่อมโยงจะกลายเป็น 1 → 2 → 3 → 4 →