我无法弄清楚为什么temp->next=NULL
打破了原始链接列表
我的代码在这里:
struct Node{
int data;
Node* next;
};
Node* createNode(int data)
{
Node* temp=new Node;
temp->data=data;
temp->next=NULL;
return temp;
}
int main()
{
Node* root=createNode(1);
root->next=createNode(2);
root->next->next=createNode(3);
display(root);
cout<<"\nAddress of root = "<<&root<<"-> "<<&(root->next)<<"-> "<<&(root->next->next);
Node* temp=root;
temp->next=NULL; //Trying to set next pointer to Null in temp list but instead it is impacting the original list by nullifying the next node. Why is it so ?
display(temp);
cout<<"\nAddress of temp = "<<&temp<<"-> "<<&(temp->next);
display(root); // Original list broke
}
输出:
Linked list => 1->2->3
Address of root = 0x7ffd3afbc2f0-> 0x5605aff6cc28-> 0x5605aff6cc48
Linked list => 1
Address of temp = 0x7ffd3afbc2f8-> 0x5605aff6cc28
Linked list => 1
答案 0 :(得分:3)
考虑指针int* ptr;
和整数int var;
。同样地,&var
是整数的地址并且与它的值不同,&ptr
是指针的地址,并且与它的值不同(它指向的 到)。
表达式Node* temp=root;
正在创建一个与temp
具有相同值的指针root
,它们引用同一个对象。 temp
和root
是不同的对象,地址不同(&root
和&temp
不同),但它们具有相同的值(root
和{{1是等于)。因此temp
和temp->next
是相同的指针。改变一个将改变另一个。
在您的示例中,只存在一个链接列表,root->next
和root
都引用了这些链接列表。
答案 1 :(得分:0)
指针只指向内存中的某个位置,因此就是它们的名字。当你这样做时:
Node* temp=root;
创建一个指针temp
指向与指针root
相同的内存位置。所以这个:
temp->next=NULL;
和此:
root->next=NULL;
做同样的事情,因为temp->next
和root->next
是相同的。