移除链表元素

68 阅读1分钟

203. 移除链表元素

class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {
        //第一个节点为空
        if (head == NULL)
            return head;
       
        //第一个就是val的结点或者后面是
        while ( head->val == val&&head != NULL)
        {
            ListNode* temp = head;
            head = head->next;
            delete temp;
        }
        
        ListNode* pre = head;
        while (pre != NULL && pre->next != NULL)
        {
            if (pre->next->val == val)
            {
                ListNode *p = pre->next;
                pre->next = pre->next->next;
                delete p;
            }else {
                pre = pre->next;
            }
        }
        return head;
    }
};
  • 报错: 错误信息 "member access within null pointer of type 'ListNode'" 指出在尝试访问一个空指针,

  • 解决思路: 应该是第一个while的先后顺序问题。

  • 调整 while 条件: 在 while (head->val == val && head != NULL) 中,判断 head != NULL 应该放在前面,否则可能访问空指针的 val