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;
}
NBQ viết 18:35 ngày 01/10/2018

m.n giải thích giúp em về **head_ref vs ạ!

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.

Trần Vĩnh Lộc viết 18:25 ngày 01/10/2018

e hiểu rồi ạ! Thank you ạ!

rogp10 viết 18:39 ngày 01/10/2018

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).

Bài liên quan
0