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