Em đoạn code xây dựng danh sách liên kết đơn như sau.
//Định nghĩa struct
#include<stdlib.h>
#include<stdio.h>
struct node {
int data;
struct node* next;
};
typedef struct node* _ref;
_ref getNode(int x);
void addFirst(_ref& head, _ref& tail, int k);
void detroyList(_ref head);
// Khởi tạo một node
_ref getNode(int x) {
_ref p;
p = (_ref)malloc(sizeof(_ref));
if(!p) {
printf("Cap phat khong thanh cong");
exit(0);
}
else {
p->data = x;
p->next = NULL;
}
return p;
}
// thêm phần tử đầu vào danh sách
void addFirst(_ref* head, _ref* tail, int k) {
_ref p =getNode(k);
if(!head) {
*head = *tail = p;
}
else {
p->next = *head;
*head = p;
}
}
// in danh sach bang de quy
_ref DQprintLIst(_ref head) {
_ref p =head
if(p->next!=NULL) {
return DQprintLIst(p->next);
printf("%d",p->data);
}
}
// huy danh sach
void detroyList(_ref head) {
_ref p ;
while(head) {
p = head;
head = p -> next;
free(p);
}
}
int main() {
_ref head = NULL, tail = NULL;
int k;
while(1) {
printf("\n nhap k = 0 de thoat ");
scanf(" %d",&k);
if(!k) break;
else {
addFirst(&head,&tail,k);
}
}
DQprintLIst(head);
detroyList(head);
}
em không hiệu tai sao cái hàm đệ quy em viết lại in được mỗi giá trị cuối vậy ạ.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?