รายการที่เชื่อมโยงเป็นโครงสร้างข้อมูลเชิงเส้นที่มีหลายโหนดที่เชื่อมต่อถึงกัน แต่ละโหนดประกอบด้วยสองฟิลด์ – ฟิลด์ข้อมูล และที่อยู่ของโหนดถัดไป
สมมติว่าเรามีรายการที่เชื่อมโยงโดยลำพัง และเราจำเป็นต้องลบโหนดแรกออกจากรายการที่เชื่อมโยงนี้ ตัวอย่างเช่น
อินพุต 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 →