题目简介
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
题目解读
题目已经有一个链表头节点(可能为空),就是在这个链表中有零个或者多个都等于val的元素,需要进行删除操作。
操作解读
如果现在有一个节点需要进行删除,那么就需要找到当前节点的前置节点可能为null值,然后进行这样操作。
node.next == node.next.next,这里需要注意的问题就是这个节点如果为空,下一个节点为空这么办 ? 这里我的解题思路就是使用虚拟头节点。代码如下
public ListNode removeElements(ListNode head, int val) {
if (head == null) return head;
ListNode listNode = new ListNode(1);
listNode.next = head;
ListNode tmp = listNode;
while (tmp != null) {
while (tmp.next != null && tmp.next.val == val) {
tmp.next = tmp.next.next;
}
tmp = tmp.next;
}
return listNode.next;
}
1.先进行边界条件判断
2.创建虚拟头节点listnode并且让其指针指向head。创建一个中间节点tmp。
3.使用tmp遇到需要删除节点进行删除。
4.return head.next也就是真正头节点。