Mỗi node trong danh sách liên kết đơn chứa 2 thành phần: data (giá trị) và next (con trỏ đến node tiếp theo).
struct Node {
int data;
Node* next;
Node(int val) : data(val), next(nullptr) {}
};
// Tạo danh sách liên kết từ mảng
Node* createList(vector<int>& arr) {
if (arr.empty()) return nullptr;
Node* head = new Node(arr[0]);
Node* curr = head;
for (int i = 1; i < arr.size(); i++) {
curr->next = new Node(arr[i]);
curr = curr->next;
}
return head;
}
// In danh sách liên kết
void printList(Node* head) {
while (head) {
cout << head->data;
if (head->next) cout << " -> ";
head = head->next;
}
cout << " -> NULL" << endl;
}
Trên Linked List, KHÔNG hoán đổi giá trị (data) giữa các node. Thay vào đó, ta thay đổi hướng con trỏ next để "di chuyển" node đến vị trí mới. Đây là điểm khác biệt cốt lõi so với sắp xếp trên mảng!
Muốn chèn node 5 vào giữa 3 → 8:
Chỉ cần: newNode->next = curr->next; curr->next = newNode;