image.png
思路
- 普通解法. 如果要删除的节点就是头结点. 就不太好操作, 会多一段先操作头结点的代码
while (head != null && head.val == val) {
head = head.next;
}
ListNode cur = head;
while (cur != null && cur.next != null) {
if (cur.next.val == val) {
cur.next = cur.next.next;
} else {
cur = cur.next;
}
}
return head;
- 虚拟头节点解法. 我们可以新增一个虚拟的头节点, dummy.next -> head, 这样处理头节点的情况也和普通节点一样了.让它看起来像是第二个节点, 注意最后返回结果的时候也要返回
dummy.next
这才是原始的头结点
public ListNode removeElements(ListNode head, int val) {
ListNode dummy = new ListNode(-1);
dummy.next = head;
ListNode cur = dummy;
while (cur != null && cur.next != null) {
if (cur.next.val == val) {
cur.next = cur.next.next;
} else {
cur = cur.next;
}
}
return dummy.next;
}
网友评论