我正在嘗試以相反的順序克隆一個鏈表。
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'型別的空指標內的成員訪問。
我在創建或初始化節點時犯了一些錯誤嗎?請解釋。
uj5u.com熱心網友回復:
克隆方法以相反的順序回傳一個新串列是不常見的,但是如果這是您的實際要求,那可以。
如評論中所述,您顯示的代碼并未考慮串列為空的可能性(即 when headis nullptr),例如:
ListNode* cloneList(ListNode* head) {
if (!head) return nullptr; // <-- add this
...
}
如果head不是nullptr并且指向一個有效的ListNode,并且串列正確地以空值結尾,那么您的代碼就可以正常作業。
在線演示
但是,它可以簡化一點,例如:
ListNode* cloneList(ListNode* head) {
ListNode *newHead = nullptr;
while (head) {
newHead = new ListNode(head->val, newHead);
head = head->next;
}
return newHead;
}
在線演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/444255.html
上一篇:冒泡排序一包卡片
