【发布时间】:2018-05-23 00:04:31
【问题描述】:
这有点愚蠢,但我无法真正解释为什么会发生这种情况。作为练习,我想反转一个单链表,我通过定义方法来做到这一点:
class solution {
void reverseLinkedList(Node*& head) {
Node* curr = head;
Node* prev = NULL;
while (curr != NULL) {
Node* _next = curr->next;
curr->next = prev;
prev = curr;
curr = _next;
}
head = prev;
}
在我的主要功能中,我拨打电话
solution s;
s.reverseLinkedList(head);
Node* iterator = head;
while (iterator != NULL) {
std::cout<<iterator->data<<std::endl;
iterator = iterator->next;
}
我之前定义了指向某个链表的头指针。 while 循环用于打印我的链表,该函数完成了它的工作。这仅在我通过引用传递头节点后才有效;我最初尝试在开始时传递 Node* head 而不是 Node*& head,它只打印了我的链表的第一个元素(并且没有反转它)。例如,如果我没有通过引用传递列表 1->2->3,我将只打印出 1。
我认为传递一个指针就足够了?为什么我没有通过引用得到这种奇怪的行为>
【问题讨论】:
-
如果按值传递指针,则看不到指针的修改(
head = prev),而通过引用则可以。
标签: c++ pointers linked-list