繁体   English   中英

运行时错误:null 类型“ListNode”指针内的成员访问 - 克隆链表

[英]runtime error: member access within null pointer of type 'ListNode' - Clone a linked list

我正在尝试以相反的顺序克隆链表。

    ListNode* cloneList(ListNode* head) {
        ListNode *prev = new ListNode(head->val);
        head = head->next;
        while (head != NULL)
        {
            ListNode *p = new ListNode(head->val, prev);
            head = head->next;
            prev = p;
        }
        return prev;
    }

ListNode的定义如下:

struct ListNode
{
    int val;
    ListNode *next;
    ListNode() : val(0), next(nullptr) {}
    ListNode(int x) : val(x), next(nullptr) {}
    ListNode(int x, ListNode *next) : val(x), next(next) {}
};

但我收到此运行时错误:成员访问类型为“ListNode”的 null 指针。

我在创建或初始化节点时犯了一些错误吗? 请解释。

克隆方法以相反的顺序返回新列表是不常见的,但是如果这是您的实际要求,那没关系。

如评论中所述,您显示的代码不考虑列表为空的可能性(即,当headnullptr时),例如:

ListNode* cloneList(ListNode* head) {
    if (!head) return nullptr; // <-- add this
    ...
}

如果head不是nullptr并且指向一个有效的ListNode ,并且该列表正确地以 null 终止,那么您的代码就可以正常工作。

在线演示

但是,它可以简化一点,例如:

ListNode* cloneList(ListNode* head) {
    ListNode *newHead = nullptr;
    while (head) {
        newHead = new ListNode(head->val, newHead);
        head = head->next;
    }
    return newHead; 
}

在线演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM