题目链接:203.移除链表元素
卡哥视频讲解:手把手带你学会操作链表 | LeetCode:203.移除链表元素
解题思路:创建一个虚拟头节点以及两个指针,如果遍历到匹配的元素,则跳过这个节点,虚拟头节点的下一个就是真正的头节点,创建虚拟头节点,就是为了应对原来的头节点就是我们需要找的节点的情况。
代码示例:
代码逻辑详解:
-
public ListNode removeElements(ListNode head, int val) {
: 这是一个公共方法removeElements
,它接受两个参数:head
,表示链表的头节点,val
,表示要移除的节点值。 -
if (head == null) { return head; }
: 首先检查头节点是否为空,如果为空,说明链表为空,直接返回头节点即可。 -
ListNode dummy = new ListNode(-1, head);
: 创建一个虚拟节点dummy
,值为 -1,它的下一个节点指向原来的头节点head
。这样做是为了统一处理头节点的情况,方便后续操作。 -
ListNode pre = dummy;
: 创建一个指向当前节点的前一个节点的指针pre
,初始时指向虚拟节点dummy
。 -
ListNode cur = head;
: 创建一个指向当前节点的指针cur
,初始时指向头节点head
。 -
while (cur != null) {
: 进入循环,遍历链表,直到当前节点cur
为空时结束循环。 -
if (cur.val == val) { pre.next = cur.next; }
: 如果当前节点的值等于要移除的值val
,则将前一个节点pre
的下一个节点指向当前节点的下一个节点,即跳过当前节点,实现移除操作。 -
else { pre = cur; }
: 如果当前节点的值不等于要移除的值val
,则将pre
指向当前节点cur
,继续遍历。 -
cur = cur.next;
: 将当前节点指针cur
指向下一个节点,继续遍历链表。 -
return dummy.next;
: 返回虚拟节点dummy
的下一个节点,即移除元素后的链表头节点。
这段代码实现了移除链表中值为 val
的元素,并返回移除元素后的链表头节点。通过使用虚拟节点,可以简化头节点的处理,使得代码更加清晰和简洁。
解题步骤:
1.判断头节点是否为空,如果是空的,则直接返回头节点
2.定义虚拟头节点以及两个新指针
3.while循环判断找出我们需要的节点值,找到了就直接将其删除,找不到就继续遍历
4.最后返回新的头节点,也就是虚拟头节点的下一个。