Sử giúp em cái Code bên dưới: Mã: #include<conio.h> #include<stdio.h> #include<iostream.h> #include<string.h> typedef struct list { int so; list*next; }; list*T; void tao(int x,list **Q) { list *P; P=new list; P->so=x; P->next=(*Q); (*Q)=P; } void xuat(list*Q) { list*P; P=Q; while (P!=NULL) { printf("%3d",P->so); P=P->next; } } list *Locate(int n, list *T) { List *P ; int count = 1; P = T; while ((P!=NULL)&&(count<=n)) { count++; P=P->next; } return P; } void chen(int x,list**T,int n) { list*Locate(int n,list *T); list *P,*Q; P=new list; P->so=x; if(n==1) { P->next=(*T); (*T)=P; } else { Q=(n-1,*T); if (Q==NULL) printf(" vi tri khong hop le "); else { P->next=Q->next; Q->next=P; } } } void xoa(int n, list**T) { list *Q,*P; if(*T==NULL) printf(" danh sach rong "); else { if (n==1){ P=(*T); (*T)=P->next; delete(P); } else { Q = Locate(n - 1, *T); if((Q==NULL)||(Q->next==NULL)) printf("Vi tri khong hop le"); else{ P = Q->next; P->next = P->next; delete P; } } } } main() { int x,n; char ch,c; clrscr(); T=NULL; do { printf("x= "); scanf("%d",&x); tao(x,&T); printf("nhap k de thoat, nhap c de tiep tuc:\n"); cin>> ch; } while (ch!='k'); printf(" danh sach vua tao :\n"); xuat(T); printf("\n nhap vao so can chen: "); cin>>x; printf("\n nhap vi tri can chen: "); cin>>n; Locate(n,T); chen(x,&T,n); xuat(T); printf("\nvi tri can xoa:"); cin>>n; Locate(n,T); xuat(T); getch(); return 0; } Nó sai như thế này đây: VD: nhập vào 5 số: 3 4 6 7 5 số cần chèn: 9 vị trí cần chèn :4 kết quả: 3 9 4 6 7 5 xóa thì không được, nó in nguyên dãy số ban đầu. Không biết sai chổ nào nửa . Mong mấy anh chị giúp em
....................> bài cua ban không sai bỡi vì bạn nhap trước ra sau nên khi minh chèn vào tính từ vị trí cuối cùng ---->bạn nên chọn cấu trúc nhập trước ra trước
Thuật toán của bạn thì đúng rồi, như pác Xấu trai nói đấy, của bạn là FILO kiểu vào trước ra sau, bạn nên dùng vào trước ra trước sẽ thấy kết quả. có một điều mình thắc mắc, C phân biệt ký tự hoa và thường, bạn nhầm chỗ này mà sao vẫn chạy nhỉ?