[TOC]
# 问题
摘取leetcode
https://leetcode-cn.com/problems/remove-linked-list-elements/description/
删除链表中等于给定值 val 的所有元素。
示例
给定: 1 --> 2 --> 6 --> 3 --> 4 --> 5 --> 6, val = 6
返回: 1 --> 2 --> 3 --> 4 --> 5
~~~
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode removeElements(ListNode head, int val) {
}
}
~~~
# 代码
先把leetcode提供的类拿出来
~~~
public class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
}
}
~~~
## 不用虚拟节点
~~~
public class Solution {
public ListNode removeElements(ListNode head, int val) {
//如果删除的元素正好是头元素,但是这个头元素不能是空,空怎么能删除
//这个头节点,还有可能是一个出现的新的头节点
while (head != null && head.val == val) {
ListNode delNode = head;
head = head.next;
delNode.next = null;
}
//如果这个链表正好被全部删除了,就返回null
if (head == null) {
return null;
}
//设置个前面的节点,从head开始,这个head肯定不是要删除的
ListNode prev = head;
//判断删除的节点是不是null
while (prev.next != null) {
//如果下个节点就是要删除的节点
if (prev.next.val == val) {
//取出这个要删除的节点
ListNode delNode = prev.next;
//把删除节点的上一个节点的他的下个指向
//指向到下个节点
prev.next = delNode.next;
//置为null,被gc
delNode.next = null;
} else {
//到后面查找下
prev = prev.next;
}
}
return head;
}
}
~~~