- Cài đặt cấu trúc danh sách liên kết đơn.
- Cài đặt hàm push() chèn một node vào đầu danh sách.
- Cài đặt hàm append() chèn một node vào cuối danh sách.
#include <stdio.h>
#include <stdlib.h>
struct node {
int data;
struct node* next;
};
typedef struct node node;
void push(node** head, node* p) {
if (*head == NULL) {
*head = p;
return;
}
p->next = *head;
*head = p;
}
void append(node** head, node* p) {
if (*head == NULL) {
*head = p;
return;
}
node* last = *head;
while (last->next != NULL)
last = last->next;
last->next = p;
}
void print_nodes(node* p) {
while (p != NULL) {
printf("%3d->", p->data);
p = p->next;
}
printf("NULL\n");
}
node* new_node(int data) {
node* p = (node*) malloc(sizeof(node));
p->data = data;
p->next = NULL;
return p;
}
int main() {
int n = 5;
node* head = NULL;
for (int i = 0; i < n; i++) {
append(&head, new_node(i));
print_nodes(head);
}
for (int i = 0; i < n; i++) {
push(&head, new_node(i));
print_nodes(head);
}
return 0;
}
Output của chương trình |
Chú thích:
- Trong C, chỉ có con trỏ mới được khai báo NULL.
- Để thay đổi nội dung của con trỏ head, chúng ta buộc phải truyền địa chỉ nó vào hàm push() và append() (call by reference). Để "hứng" được địa chỉ này, ta dùng khai báo node** head (con trỏ của con trỏ). Vì sao thì hãy tự suy nghĩ và nghiền ngẫm nhé.
- Trong hàm main, vòng lặp đầu sẽ chèn 5 phần tử có giá trị từ 0 tới 4 vào cuối danh sách liên kết đơn, vòng lặp thứ hai chèn 5 phần tử có giá trị từ 0 tới 4 vào đầu danh sách liên kết đơn.
- Có thể copy đoạn code trên và paste chạy trực tiếp ở https://www.onlinegdb.com/.
- Xem thêm: Cài đặt danh sách liên kết đơn bằng C++
- Xem thêm: Cài đặt danh sách liên kết đơn bằng C++