Linked list เป็นโครงสร้างข้อมูลเชิงเส้นที่มีโหนดหลายตัวที่เชื่อมต่อกัน แต่ละโหนดประกอบด้วยสองฟิลด์ - Data Field และที่อยู่ของโหนดถัดไป
สมมติว่าเรามี singly linked list และเราต้องลบโหนดแรกจาก linked list นี้ ตัวอย่างเช่น
อินพุต 1
4 → 3 → 2 → 1
เอาต์พุต
3 → 2 → 1 →
คำอธิบาย
'4' เป็นโหนดแรกใน singly linked list ที่กำหนด หลังจากลบโหนดแรก linked list จะเป็น 3→2→1
อินพุต 2
1 → 2 → 3 →
เอาต์พุต
2 → 3 →
คำอธิบาย
หลังจากลบโหนดแรก '1' linked list จะเป็น 2 → 3
วิธีการแก้ปัญหา
เริ่มต้นเรามี linked list ที่ประกอบด้วยโหนด แต่ละโหนดมีข้อมูลและที่อยู่ไปยังโหนดถัดไป หลังจากแทรกข้อมูลใน linked list เราจะสร้างฟังก์ชันเพื่อลบโหนดแรก
ดังนั้น เราจะสร้าง temporary pointer ที่ชี้ไปที่ head เริ่มต้น และย้าย head ไปที่โหนดถัดไป ตอนนี้ลบ temporary node และคืนค่า linked list
- ฟังก์ชัน deleteAtHead(node*& head) รับ pointer ไปยัง head และลบโหนดแรกของ linked list
- สร้าง temporary pointer ที่ชี้ไปที่ head เริ่มต้น
- Head ย้ายไปที่โหนดถัดไป
- ลบ temporary pointer
- คืนค่า linked list
ตัวอย่างโค้ด
#include <iostream>
using namespace std;
class Node {
public:
int data;
Node* next;
Node(int d) {
data = d;
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);
return 0;
}
ผลลัพธ์
การรันโค้ดด้านบนจะสร้างเอาต์พุตเป็น
3 → 2 → 1 →
เนื่องจาก singly linked list ที่กำหนดคือ 4 → 3 → 2 → 1 → หลังจากลบโหนดแรกซึ่งคือ 4 linked list จะกลายเป็น 3 → 2 → 1 →