203. 移除链表元素
重点:
- 单向链表,需要存储前一个元素,进行拼接;
- while循环只能判断当前节点是否为空;
- 指针移动在while循环中控制
方法一:原链表处理,头结点特殊处理
略
方法二:添加虚拟节点
public ListNode removeElements(ListNode head, int val) {
//设置虚拟节点
ListNode firstNode = new ListNode();
//虚拟节点指向head
firstNode.next = head;
//当前节点
ListNode cur = head;
//存储前一个节点,找到元素后进行连接
ListNode pre = firstNode;
while (cur != null) {
if (cur.val == val) {
//找到之后,前一个还是原来的(因为删除了当前节点)
pre.next = cur.next;
} else {
//未找到,前一个节点进一步
pre = cur;
}
//当前节点,移到下一个
cur = cur.next;
}
// 不返回虚拟节点
return firstNode.next;
}