注意删除头节点时重置头指针
/**
* 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 tmp = head;
// 前置指针
ListNode pre = new ListNode();
pre.next = head;
// 记录指针
ListNode record = head;
while (tmp != null) {
if (tmp.val == val) {
// 删除头节点要重置头指针
if (pre.next == head) {
head = head.next;
}
// 不对遗留指针进行处理(处理需要使用记录指针record)
pre.next = tmp.next;
tmp = tmp.next;
}
else {
pre = pre.next;
tmp = tmp.next;
}
}
return head;
}
}