01/10/2018, 16:23
Hàm reverse() trong Linked List
m.n giải thích giúp em về **head_ref vs ạ!
void reverse(struct node** head_ref) {
struct node* prev = NULL;
struct node* current = *head_ref;
struct node* next;
while (current != NULL) {
next = current->next;
current->next = prev;
prev = current;
current = next;
}
*head_ref = prev;
}
Bài liên quan
head_ref ở đây là chính là con trỏ trỏ tới head của một linked list. Bài toán yêu cầu reverse linked list đã cho nên hàm reverse có tham số truyền vào struct node** head_ref. Để reverse linked list đã cho chỉ cần gọi hàm reverse với tham số truyền vào là địa chỉ của node head của linked list đó. Nếu hàm reverse chỉ khai báo là void reverse(struct node* head_ref) thì sẽ không thao tác được với linked list cần reverse mà chỉ thao tác được với một biến local, sau khi ra khỏi hàm biến này sẽ được xóa dẫn đến mọi thay đổi trong hàm sẽ không được áp dụng trên linked list cần reverse.
e hiểu rồi ạ! Thank you ạ!
Nếu
*head_ref
không được truyền tham biến thì bạn chỉ xử lí trên một biến cục bộ và như vậy thì head ở bên ngoài sẽ không được cập nhật đúng (nó thành tail rồi).