为什么从链表中删除节点的代码不起作用?

时间:2016-12-09 12:00:11

标签: c++ linked-list

我正在研究关于Leetcode的问题,该问题旨在删除链表元素。

以下是问题:

  
      
  1. 删除链接列表元素
  2.         

    实施例

         

    鉴于:1 - > 2 - > 6 - > 3 - > 4 - > 5 - > 6,val = 6

         

    返回:1 - > 2 - > 3 - > 4 - > 5

这是我的代码:

class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
    ListNode* cur = head;
    while(cur -> next != NULL && cur -> next -> val != val)
    {
        cur = cur -> next;
    }

    cur -> val = cur -> next -> val;
    cur -> next = cur -> next -> next;

    return head;
   }
};

我提交代码时遇到了运行时错误。问题很简单,但由于我不熟悉C ++,我仍然无法找出错误的位置。你能帮帮我吗?

1 个答案:

答案 0 :(得分:1)

您的代码崩溃,因为循环有两个退出条件:

  • 您找到了您要查找的节点,
  • 您到达列表的末尾而未找到节点

您的代码假定它是第一个,而不是第二个条件,因此它会取消引用cur-> next-> val,这可能会导致崩溃。

您的代码还有其他问题:

  • 您需要处理删除多个项目,如示例
  • 所示
  • 您需要通过释放已删除的节点来防止内存泄漏
  • 当头部指向必须删除的节点时,您需要处理一种情况
  • 您需要在列表为空时处理情况。