Danh Sách liên kết

Hiện tại em đang làm bài trong sách mà ngồi mấy tiếng ko biết sai chỗ nào ở Hàm tách 1 DSLK thành 2 cái ? Nên mạn phép lên trang để hỏi . Mong mọi người giúp đỡ
Em chỉ xin nêu ra chỗ em sai

void O_put_3(List l,List &A,List &B){ // tach 1 DSLK thanh 2 danh sack lien ket
    So *DanhSach; DanhSach = l.Head;
    int dem = 0;
    while(DanhSach != NULL){
        if(dem % 2 == 0){
            if(A.Head == NULL){
                So *temp_1 = DanhSach;
                temp_1->pNext = NULL;
                A.Head = A.Tail = temp_1;
            }
            else{
                So *temp_1 = DanhSach;
                temp_1->pNext = (So *)malloc(sizeof(So));  temp_1->pNext = NULL;
                A.Tail->pNext = temp_1;
                A.Tail = temp_1;
            }
        }
        else{
            if(B.Head == NULL){
                So *temp_2 = DanhSach;
                temp_2->pNext = NULL;
                B.Head = B.Tail = temp_2;
            }
            else{
                So *temp_2 = DanhSach;
                temp_2->pNext = (So *)malloc(sizeof(So));  
                temp_2->pNext = NULL;
                B.Tail->pNext = temp_2;
                B.Tail = temp_2;
            }
        }
        dem++;
        DanhSach = DanhSach->pNext;
    }
/*A.Tail->pNext = NULL;
B.Tail->pNext = NULL;*/
}

Em chân thành cảm ơn mọi người đã xem topic này !
Học

Em muốn tách như thế nào?

bạn ấy muốn tách xen kẽ, phần tử vị trí chẵn vào A, phần tử vị trí lẻ vào B

		temp_1->pNext = (So *)malloc(sizeof(So));  
                temp_1->pNext = NULL;

hình như chỗ này hơi kì, tạo ra rồi lại bỏ đi

1 Like

Vậy thì vẫn thiếu thông tin qúa, So, List có cấu trúc như thế nào còn chưa biết :frowning:

1 Like
http://docs.vietnamdoc.net/Data/Soft/2008/08/04/CTDLGT_LT.pdf

Hình như tài liệu này có thể giải đáp được phần bạn đang thắc mắc.

tại lúc đầu danh sách nó trỏ tới tiếp phía sau mình chỉ cho nó trỏ về NULL thôi :smiley:

Struct So{
    void *InFor;
   struct So *pNext;
};

Struct List{
        So *Head;
       So *Tail;
};

cái void* là do trong sách nó biểu em cần phải làm thế ! @@ em ko hiểu sao nữa

            temp_2 = (So *)malloc(sizeof(So));  //khởi tạo
            temp_2->pNext = NULL;  //gán NULL, vì chưa có phần tử tiếp theo
1 Like

Sorry Hoàng ! cảm ơn Hoàng đã sửa lại comment

Dùng void* cũng được, bởi vì con trỏ void* có thể trỏ tới bất kỳ kiểu dữ liệu nào @Thai_Hoc_Nguyen

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