1.题目

删除链表中等于给定值 val 的所有节点。

2.示例

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

  • 示例 2: 输入:head = [], val = 1 输出:[]

  • 示例 3: 输入:head = [7,7,7,7], val = 7 输出:[]

3.解法

判断题意:head指向链表的第一个节点,当 head.val == val 时,具有特殊性

方法:1. 对头节点特殊处理.

2. 创建虚拟的头结点,指向head

注意:不能直接后移“头节点”,这样会导致找不到链表从何开始

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode removeElements(ListNode head, int val) {
        //创建一个虚拟的头节点
        ListNode newlistnode = new ListNode();

        // 指向真正的头节点
        newlistnode.next = head;

        
        // 赋值一个向后遍历的指针
        ListNode pointer = newlistnode;

        while(pointer.next != null){
            // 若与 val 相同, 
            if(pointer.next.val == val){
                pointer.next = pointer.next.next;
            }
            else{
                pointer= pointer.next;
            }
        }

        return newlistnode.next;

        
    }
}