移除链表元素

题目链接

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点。

示例:

20220109211747-2022-01-09-21-17-48

输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]

思路

解法一:

解题关键:若使用 cur 表示当前节点,则删除下一个节点方法:cur.next = cur.next.next

解题思路:

  1. 使用假节点 dumpyNode 指向head,这样可避免对 head 删除再判断的特殊情况。
  2. 使用 cur 指向 dumpyNode, 当 cur 的下一个节点不为空循环
    • 若节点的值等于 val, 则删除节点;
    • cur 移动到下一节点
class Solution
{
public:
    ListNode *removeElements(ListNode *head, int val)
    {
        ListNode* dumpyNode = new ListNode(0, head);
        ListNode* cur = dumpyNode;
        while(cur->next != nullptr) {
            if (cur->next->val == val) {
                cur->next = cur->next->next;
            }else {
                cur = cur->next;
            }
        }
        return dumpyNode->next;
    }
};