我有一个链接列表指针的矢量。
每个LinkedList都有一个头指针,它是一个指向Node的指针。该节点当然是列表的头部。
矢量[3]的头部与矢量[0]的头部相同。 我将vector [0]的头指针更改为指向vector [1]指向的同一节点,或指向vector [1]的头部。
然而,矢量[3]的头指针永远不会改变。我怎样才能通过改变vector [0]的头指针来改变vector [3]的头指针呢? 我尝试了两种不同的方法。没有人工作过。
vector[0]->head=vector[1]->head;
*(vector[0]->head)=*(vector[1]->head);
答案 0 :(得分:0)
我现在没有看到解决问题的简单方法(会考虑它:)),但我认为您应该理解为什么您的代码行为与您的期望不同。
我想这里我们谈论的是STL向量,即容器
具体来说,这意味着您在每个向量条目中都有一个链接列表头的副本,因此修改向量[i]中指针的副本不会影响内容矢量[j]的
我的两分钱:会使用带键=头指针的地图适合您的需要吗?或者你真的需要不同的元素来追踪同一个列表吗?
希望这有帮助
CiaoCiao 塞尔吉奥
答案 1 :(得分:0)
我相信你真正的问题不是很好地理解指针和链表。指针可能有点难以理解。但是,我会试着回答你的问题。
首先,请注意C ++和Java中的指针行为不同,指针通过引用传递并通过指针传递。
按引用传递表示将保留所做的更改,并且通过指针传递会创建一个副本,其中更改将不是永久性的。
此外,根据我的理解,你有vector [0] - > head vector [3] - > head指向相同的内存地址但后来改变了vector [0] - > head指向的内容。这不会改变为vector [3] - > head,因为它仍将指向内存地址向量[0] - > head指向先前。
如果你试图让它们指向同一个位置,你必须指向矢量[3] - >头部到矢量[1] - >头部也是如此。
希望我有所帮助(我是堆叠溢出的新手)。
答案 2 :(得分:0)
vector[0] = &HeadA; &HeadA->head points to Node A
vector[1] = &HeadB; &HeadB->head points to Node B
vector[3] = &HeadC; &HeadC->head points to Node A
如果你改变vector [0] - > head to point to Node B,那就不会改变vector [3] - > head的内容,因为它是一个完全独立的变量。
不是设置vector [3] - >头部指向节点A,而是必须设置vector [3] = vector [0]。这意味着向量的第1个和第4个元素包含指向同一个Head对象的相同指针:
vector[0] = &HeadA; &HeadA->head points to Node A
vector[1] = &HeadB; &HeadB->head points to Node B
vector[3] = &HeadA; &HeadA->head points to Node A
答案 3 :(得分:0)
您无法使用单个作业更改两个值。
在您的情况下,有vector[0]->head
和vector[1]->head
,两个不同的指针有两个值。只要你保留它们,它们将是相等的,当你改变另一个时,它们会改变一个。
您可以使用额外级别的间接:
Node* commonPointer = head_of_some_list;
VectorElement { ... Node **head; }
vector[0]->head = &commonPointer;
vector[3]->head = &commonPointer;
*(vector[0]->head) = head_of_another_list;
//Now *(vector[0]->head), *(vector[3]->head) and commonPointer all eventually point to head_of_another_list;
虽然这不像好的设计。