Sự khác nhau trong r = r->next và r->next = r

theo em thì r -> next =r chính là gán vùng địa chỉ next là node sau --> từ đó ta có thể truy cập đến node sau
r=r-> nex thì r sẽ là node hiện tại nhưng mà trong bảng băm phương pháp liên kết thì nó có nghĩa đi tiếp
em không hiểu cơ chế của nó luôn , đây là đoạn code để dễ hình dung ạ
em đã thử xem địa chỉ bằng cách cout<<r ; ngay sau r=r->next nhưng vẫn khó hiểu và còn 1 thứ nữa là cout<next không hoạt động . Nếu ai biết có thể chỉ em hoặc gợi ý giúp em với ạ , em cảm ơn nhìu ạ

#include<iostream>
using namespace std;
#define M 7
struct Node
{
    int value;
    Node *next;
};

void initHash(Node *heads[])
{
    
    for(int i=0;i<M;i++)
    {
        heads[i]=NULL;
    }
}
Node *createNode(int x)
{
       Node *p=new Node;
       p->value=x;
       p->next=NULL;
       return p;
}

int hashFunc(int value)
{
    return value %M;
}

//***********************************************************************************
void insertNode(Node *heads[], int value)
{
    int h=hashFunc(value);
    Node *r=heads[h];
    Node *prev=NULL; 
    while(r!=NULL && r->value<value)
    {
        prev =r;
        r=r->next ;
    }
    Node *p=createNode(value);

Câu này sẽ tạo loop :smiley: tự nó trỏ đến chính nó.

Còn r = r->next thì r->next là node tiếp theo của r (hoặc NULL nếu hết) theo định nghĩa.

3 Likes

thì r =r->next là node tiếp theo của r nhưng mà lúc này mình vẫn chưa có node làm sao nó biết là có node tiếp theo tồn tại và giá trị next nó sẽ lấ ở đâu
giống như trong phần duyệt danh sách liên kết đơn thì có câu lệnh
for( node *p=head; p!=NULL; p=p->next ) thì rõ ràng ta có tất cả các node và giá trị next ta cũng có rồi nên nó mới có thể truy cập
tuy nhiên trong đây thì ta có thể thấy là node ko có sẵn và giá trị next cũng ko rõ lắm
r=r-> next nếu theo ý hiểu của em thì r sẽ bằng r hiện tại trỏ vào vào vùng next của node hiện tại
mà vùng next của node hiện tại không chứa địa chỉ của vùng nhớ nào cả

mà theo em nghĩ
r->next =r thì truy cập vào vùng next của node hiện tại và gán cái vùng này là con trỏ của node sau mà con trỏ node sau thì chỉ vào vùng nhớ của node sau nên
r->next=r là thiết lập sự nối kết của 2 node
nếu anh thấy em nói còn sai sót hoặc không đúng thì anh góp ý ạ tại mấy cái nì em còn chưa giỏi nên mới tìm hiểu thêm ấy mà trên mạng em tìm thì em hiểu theo ý đó ấy

Đoạn code ban đầu sai vì thiếu liên kết vào node vừa tạo (mặc dù bạn có để ý đến prev).

2 Likes

oh em cảm ơn anh nhiều nhiều nhá
nhưng tạo liên kết với node vừa tạo như thế nào ạ

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