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;
}
}

参与讨论
(Participate in the discussion)
参与讨论