【问题标题】:Why segmentation fault (core dumped) when I reverse LinkList?为什么当我反转 LinkList 时出现分段错误(核心转储)?
【发布时间】:2019-03-10 13:37:11
【问题描述】:

我写了一个代码单,以反向链接列表。 \ 但它会导致分段错误,我不知道为什么??

  ListNode* ReverseList(ListNode* pHead) {
    ListNode *ptr_back, *ptr_cur, *tmp;
    ptr_cur = pHead;
    ptr_back = pHead->next;
    ptr_cur->next = NULL;
    while(ptr_back){
        tmp = ptr_back->next;
        ptr_back->next = ptr_cur;
        ptr_cur = ptr_back;
        ptr_back = tmp;
    }
    return ptr_cur;
}

【问题讨论】:

  • 这里可能存在多个问题。例如,你怎么知道 pHead->next 是一个有效的 ptr?我觉得这个问题缺乏细节。
  • 是的,这段代码可能很完美(对我来说看起来很合理),但设置列表的代码有问题。
  • @Sir Donnie 你是对的!pHead->next 可能不是指向 ListNode 的有效指针,因此它可能没有 next 指针,并且 pHead->next->next 导致分段。
  • @Jesper Juhl,很抱歉没有完整的示例。但这是 OJ(nowcode.com) 的问题之一,我也不知道哪个测试示例未能通过我的代码。跨度>

标签: c++ linked-list segmentation-fault reverse


【解决方案1】:

谢谢@唐尼爵士 我更改了我的代码。它可以工作!

 ListNode* ReverseList(ListNode* pHead) {
  ListNode *ptr_back=pHead;
  ListNode *ptr_cur=NULL;
  ListNode *tmp = NULL;
    while(ptr_back!=NULL){
        tmp = ptr_back->next;
        ptr_back->next = ptr_cur;
        ptr_cur = ptr_back;
        ptr_back = tmp;
    }
    return ptr_cur;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多