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

Why this code for removing nodes from linked list doesn't work?

本文关键字:节点 代码 不起作用 删除 链表 为什么      更新时间:2023-10-16

我正在研究LeetCode的问题,该问题旨在删除链接的列表元素。

这是一个问题:

  1. 删除链接列表元素

示例

给定: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 并不那么熟悉,因此我仍然无法确定错误在哪里。你能帮我吗?

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

  • 您找到了您要寻找的节点,
  • 您在没有找到节点的情况下到达列表的结尾

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

您的代码还有其他问题:

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