“struct ListNode”类型的空指针内的成员访问

新手上路,请多包涵
struct ListNode {
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};

class Solution {
public:
    bool hasCycle(ListNode *head) {
        if(head == NULL) return false;
        ListNode* walker = head;
        ListNode* runner = head;
        while(runner->next != NULL && walker->next != NULL){
            walker = walker->next;
            runner = runner->next->next;
            if(walker == runner) return true;
        }
        return false;
    }
};

我正在练习一个看起来很简单的面试代码。我必须返回一个确定单链表是否有循环的布尔值。我做了两个指针 walker 移动 1 步和 runner 每次迭代移动 2 步。

但随后这段代码给了我一个错误:

 Line 15: member access within null pointer of type 'struct ListNode'

是什么导致了这个错误?

原文由 Dukakus17 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

您只需确保 runner->next 不为空,但是在分配之后

runner = runner->next->next;

runner 可以变为空。

原文由 user7860670 发布,翻译遵循 CC BY-SA 3.0 许可协议

排序答案在这里有解释

它返回错误,因为 runner=runner->next->next 可以为 NULL 并且您正在检查 runner->next!=NULL 在 while 条件下,因此您必须在代码中进行一些更改才能得到答案 在 while 条件检查中对于 runner->next->next!=NULL 并得到正确答案。

快乐编码:>)

原文由 Afroz Quraishi 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题