203. 移除链表元素 - 力扣(LeetCode)

开始写的时候没有想明白的问题
1. 开始我是想头节点 尾节点 中间节点 分开处理 如果删除的是头节点 然后又要删除头节点的后继节点 那么 这样子的话头节点分开处理就毫无意义了 接着是尾节点 开始我定义的是curr = head
当while(head->next)的时候 尾节点的情况我就要在循环外面处理了 但是尾节点的next已经没有大小 指向它 会直接报错
这时 使用一个虚拟头节点newhead->next = head就很好的解决了这个问题 curr = newhead 若curr->next符合条件 直接将 curr->next = curr->next->next 直接把要删除的节点给移除了链表 如果不符合条件 curr = curr->next 这样子的话 也没有让指针越界 也可以很好的处理了头节点的情况
但是我没有真真的释放指针的内存 缺点
- 从链表的结构上看:节点已经被删除,因为链表的指针已经跳过了它。
- 从内存管理上看:被删除的节点还在内存中,除非显式调用 delete。
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {
        ListNode *newHead = new ListNode();
        newHead->next = head;
        ListNode *pre = newHead;
        while ( pre->next ){
            if ( pre->next->val == val ){
                pre->next = pre->next->next;
            }else{
                pre = pre->next;
            }
        }
        return newHead->next;
    }
};















![[maven]使用spring](https://i-blog.csdnimg.cn/direct/a51c5791acb745c5a626325aaccf6eda.png)

