runtime error: member access within null pointer of type 'ListNode' - Clone a linked list
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' 类型的空指针内的成员访问。
我是不是在创建或初始化节点时犯了一些错误?请解释。
克隆方法以 反向 顺序 return 新列表是不常见的,但是没关系,如果这是您的实际要求。
如评论中所述,您显示的代码并未考虑列表为空的可能性(即,当 head
为 nullptr
时),例如:
ListNode* cloneList(ListNode* head) {
if (!head) return nullptr; // <-- add this
...
}
如果 head
不是 nullptr
并且指向一个有效的 ListNode
,并且列表是正确的 null-terminated,那么您的代码工作正常。
不过可以简化一点,例如:
ListNode* cloneList(ListNode* head) {
ListNode *newHead = nullptr;
while (head) {
newHead = new ListNode(head->val, newHead);
head = head->next;
}
return newHead;
}
我正在尝试以相反的顺序克隆链表。
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' 类型的空指针内的成员访问。
我是不是在创建或初始化节点时犯了一些错误?请解释。
克隆方法以 反向 顺序 return 新列表是不常见的,但是没关系,如果这是您的实际要求。
如评论中所述,您显示的代码并未考虑列表为空的可能性(即,当 head
为 nullptr
时),例如:
ListNode* cloneList(ListNode* head) {
if (!head) return nullptr; // <-- add this
...
}
如果 head
不是 nullptr
并且指向一个有效的 ListNode
,并且列表是正确的 null-terminated,那么您的代码工作正常。
不过可以简化一点,例如:
ListNode* cloneList(ListNode* head) {
ListNode *newHead = nullptr;
while (head) {
newHead = new ListNode(head->val, newHead);
head = head->next;
}
return newHead;
}