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