5-6 removeNthFromEnd retNode 的作用

来源:5-6 链表与双指针 Remove Nth Node Form End of List

瞬息之间

2019-04-14

bobo老师,对于Remove Nth Node From End of List的cpp solution 我做了改动后对于 输入是 ([1],1) 的时候产生了use-after-free 的故障, 能麻烦指出一下原因吗。
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {

    ListNode* dummyHead = new ListNode(0);
    dummyHead->next = head;

    int length = 0;
    for(ListNode* cur = dummyHead->next ; cur != NULL ; cur = cur->next)
        length ++;

    int k = length - n;
    assert(k >= 0);
    ListNode* cur = dummyHead;
    for(int i = 0 ; i < k ; i ++)
        cur = cur->next;

    ListNode* delNode = cur->next;
    cur->next = delNode->next;
    delete delNode;

    // ListNode* retNode = dummyHead->next;
    delete dummyHead;
    return head;
}

};
在最后的时候没有新建指针 retNode 而是返回了原先的head, 在leetcode中只通过了1/280 的testcase。
报错是:
图片描述

谢谢~

写回答

1回答

liuyubobobo

2019-04-14

在只有一个元素的时候,你删掉的就是那个唯一的节点,也就是head。head被释放掉了,又返回head,报错:)


继续加油!:)

0
0

玩转算法面试-- Leetcode真题分门别类讲解

课程配套大量BAT面试真题,高频算法题解析,强化训练

7442 学习 · 1159 问题

查看课程