[Wiki] Con trỏ với danh sách liên kết đơn trong c/c++

  • Cấp phát vùng nhớ cho một nút : (Nút ở đây như 1 điểm để nhấn vào)
Nut *p = (Nut *)malloc(sizeof(Nut));
  • Thêm một nút vào đầu danh sách:
    Đầu tiên ta phải cấp phát vùng nhớ cho nút mới này và cho con trỏ p trỏ đến (quản lý), sau đó sẽ đưa giá trị vào nút. Thao tác cuối cùng là gắn nút mới này vào đầu danh sách bằng cách cho nút này quản lý nút đầu tiên của danh sách (p->Tiep=dau), tiếp đến cho con trỏ dau trỏ đến nút mới (nút mà p cũng đang trỏ). Chú ý là phải thực hiện trước bước (con trỏ dau trỏ đến nút mới ngay) thì danh sách sẽ bị “lạc lối”, kiểu như “chuyển công tác” mà chưa bàn giao công việc cho người thay thế! (người thay thế ở đây là con trỏ p->Tiep.
void themDau(int giatri)
{
    Nut *p = (Nut *)malloc(sizeof(Nut));    //1. Khai báo và cấp phát vùng nhớ cho p
    p->GiaTri = giatri;                     //2. Đưa giá trị vào p
    p->Tiep = dau;                          //3. Gắn p vào đầu danh sách
    dau = p;                                //4. Cập nhật con trỏ dau
}
  • Thêm một nút vào cuối danh sách

Có nhiều cách để thêm một nút mới vào cuối danh sách. Dưới đây là cách có sử dụng thêm con trỏ cuoi (luôn trỏ đến phần tử cuối cùng của danh sách). Nếu không có con trỏ này, trước mỗi lần thêm nút mới ta phải “duyệt” toàn bộ danh sách để tìm được con trỏ trỏ đến phần tử cuối cùng (chính là con trỏ cuoi). Khi đã có được con trỏ cuoi, để gắn nút mới vào danh sách ta chỉ việc gắn nút này vào ngay sau nút được trỏ bởi cuoi.

void themCuoi(int giatri)
{
    Nut *p = (Nut *)malloc(sizeof(Nut));    //1. Khai báo và cấp phát vùng nhớ cho p
    p->GiaTri = giatri;                     //2. Đưa giá trị vào p
    p->Tiep = NULL;  
    if (dau == NULL)                        //3. Gắn p vào cuối danh sách
        dau = p;
    else
        cuoi->Tiep = p;
    cuoi = p;                               //4. Cập nhật con trỏ cuoi
}
2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?