代码随想录day3-移除链表元素

80 阅读1分钟

题目简介

给你一个链表的头节点 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也就是真正头节点。