移除链表元素

原题:

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

示例 1: 203. 移除链表元素 - 图1

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

示例 2:

输入:head = [], val = 1
输出:[]

示例 3:

输入:head = [7,7,7,7], val = 7
输出:[]

提示:

  • 列表中的节点在范围 [0, 104]
  • 1 <= Node.val <= 50
  • 0 <= k <= 50

解题方法:

解法一:

class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {
        ListNode *dummyNode=new ListNode(0,head);
        ListNode *cur=dummyNode;
        while(cur->next!=NULL)
        {
            if(cur->next->val==val)
            {
                ListNode* temp=cur->next;
                cur->next=cur->next->next;
                delete temp;
            }
            else
            {
                cur=cur->next;
            }
        }
        return dummyNode->next;
    }
};

做题小结:

本题主要是虚拟头节点的使用比较精髓,新建一个虚拟的头结点,这样就能保证之后删除节点都采用同样的方式,即cur->next=cur->next->next;否则的话,就需要对头结点等于val的情况单独进行处理了!

注意,关于判准还是自己好好写完,cur->next!=null就不要简写成cur->next了,因为经常会搞错要不要加!号