讨论/《链表》 - 移除链表元素/
《链表》 - 移除链表元素

多一些变量的话可以更加轻松地理解问题。
因为考虑到头结点可能会是要删除的数据,所以需要新建表头指向头结点。新表头为P。

然后新建一个变量L,把P赋值给L.L的作用就是前一个节点。
新建变量Q,用head 赋值给Q,Q的作用就是当前节点。

接着只要循环到Q为空即可。

在循环中,判断Q->val 和 目标值是否相等。相等则让前结点L->next指向Q->next, Q= Q->next;
当不相等时,则Q,L 一起向前走。

最后返回P->next即可。

class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {
        ListNode *p = new ListNode(-1);
        p->next = head;
        ListNode *q ;
        q = head;
        if (!head)
            return head;
        ListNode *l = p;
        while(q)
        {
            if(q->val == val)
            {
                l->next = q->next;
            }
            else
            {
                l = l->next;
            }
            if(q->next)
                q = q->next;
            else 
                q = nullptr;
        }
        return p->next;
    }
};
展开全部 19 讨论