Loading

203. [链表]移除链表元素

203. 移除链表元素

方法一:设置哨兵节点

如果移除的元素是在链表的中段,那么问题好像不会那么复杂,但删除元素有可能出现在链表的头部,那么问题就可能相对复杂。

可以通过哨兵节点去解决它,哨兵节点广泛应用于树和链表中,如伪头、伪尾、标记等,它们是纯功能的,通常不保存任何数据,其主要目的是使链表标准化,如使链表永不为空、永不无头、简化插入和删除。

在本题中,哨兵节点的作用是当做伪头。

初始化哨兵节点为ListNode(-1),并设置sentinel.next = head

初始化prev指针用于指向哨兵节点,用于最终输出答案;

利用哨兵节点不断比较后继节点的值是否等于\(val\),相等就让哨兵节点的后继节点指向后继节点的后继节点,不相等则更新当前哨兵节点。

class Solution {
    public ListNode removeElements(ListNode head, int val) {
        ListNode sentinel = new ListNode(-1);
        sentinel.next = head;
        ListNode prev = sentinel;
        while (sentinel.next != null){
            if (sentinel.next.val == val) {
                sentinel.next = sentinel.next.next;
            } else {
                sentinel = sentinel.next;
            }
        }
        return prev.next;
    }
}
posted @ 2020-10-24 11:12  上海井盖王  阅读(96)  评论(0)    收藏  举报