【问题标题】:traverse linklist using reference not working使用引用遍历链接列表不起作用
【发布时间】:2018-03-27 22:35:18
【问题描述】:

我正在尝试制作一个队列列表,我正在传递链接列表的引用,但它不起作用并给出错误。

在函数'void insertDataToQueue(Node**, int)'中:| 在 '* temp' 中请求成员 'next',它是指针类型 'Node* {aka node*}' (也许你的意思是使用 '->' ?)|

 void insertDataToQueue(Node **queueList, int burstTime){
    Node *newNode = new Node;
    newNode->burstTime = burstTime;
    newNode->next = NULL;

if(queueList == NULL){
    *queueList = newNode;
}
else{
    Node **temp = queueList;
    while(*temp != NULL)
        temp = *temp->next;
}
}

【问题讨论】:

  • 成员访问的优先级高于取消引用,请参阅here
  • 那么我该如何遍历这个列表呢?
  • 你写一个数据结构的目的是什么(已经存在于namespace std)?
  • 我建议不要使用指针到指针的参数(我认为我没有使用过一个有效的案例),而是学习通过引用传递,它使语法很多更简单更清晰
  • 您的问题得到解决了吗?如果是,请考虑接受可以解决您的问题的答案。如果不是,请随时询问更精确或其他任何问题

标签: c++ c++11


【解决方案1】:

这个

*temp->next;

被解析为

*(temp->next); 

因为-> has higher precedence than *,如果你想先解引用然后访问成员,你可以使用括号:

(*temp)->next;

【讨论】:

  • 但是tempNode **。我认为他必须这样声明:Node *temp = *queueList
  • @Garf365 tbh 一旦有多个*,我就会迷路。只是不再习惯这些东西,因为我意识到可以在没有指针的情况下编写 C++。我试图将答案集中在所要求的行上,这可能不是唯一的错误
  • 我只是提一下,因为根据您的回答,这条线 temp = (*temp)->next; 会产生错误,因为 temp 是 Node**(*temp)->next;Node*
  • @Garf365 我想使用临时变量访问真实列表,最后我想要 newNode 所以我应该将它添加到真实列表中。你能帮我吗?
  • @AnkitBaid 使用 std::queue 或任何最适合的容器。
【解决方案2】:

要遍历整个列表,只需一个指向Node 的简单指针就足够了:

void insertDataToQueue(Node **queueList, int burstTime){
    Node *newNode = new Node;
    newNode->burstTime = burstTime;
    newNode->next = NULL;

    if(queueList == NULL) {
        *queueList = newNode;
    }
    else {
        Node *temp = *queueList;
        // Find last element, ie element who "next" field is NULL
        while(temp->next != NULL) {
            temp = temp->next;
        }
        // Make last element to point to new element
        temp->next = newNode;
    }
}

现在,没有任何链接,我想(我希望)仅用于学习方面。因为 C++ 是您需要的每个容器。例如,您有 std::liststd::queue 链接列表。对于生产代码,最好使用它而不是自己开发。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多