题目:删除链表中的节点

删除链表中等于给定值 val 的所有节点。

示例:

输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5


public ListNode removeElements(ListNode head, int val) {
    if (head == null)
        return null;
    while (head != null && head.val == val) {
        head = head.next;
    }
    if (head == null)
        return null;
    
    ListNode node = head;

    while (node.next != null) {
        if (node.next.val == val)
            node.next = node.next.next;
        else
            node = node.next;
    }
    return head;
}


边界值判断:

head == null    // 空链表,没得删,直接返回null

变量注释:

node    // ListNode类型,临时变量,用来控制循环

解题思路:

(1) 我们需要先将链表的头结点保存下来,但是有一种情况需要注意

头节点的值也要被删除的时候(head.val == val),我们不能简单的直接将head保存起来,要把链表前面连续的需要删除的节点  从链表移除出去,得到一个头节点不需要被删除的新链表(head.val != val)。

也就是第1个循环所做的事情。

这里需要再做一次非空校验,例如输入[1,1,1] ,1; 链表全是1,执行过(1)后,新链表为空,直接返回null即可。

(2) node 的初始值是头节点(不等于val),循环遍历链表的时候,每次执行的操作是 判断下一个节点 是否要删除,即 比较node.next.val 和 val,

如果相等,将 判断的节点(node.next)移出链表,node.next  = node.next.next

如果不相等,继续往后遍历,node = node.next

(3) 最后返回head

leetcode-203 删除链表中的节点(RemoveLinkedListElements)-java

相关文章:

  • 2021-07-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-01-06
猜你喜欢
  • 2021-06-19
  • 2022-01-11
  • 2021-09-15
  • 2022-02-13
  • 2021-09-27
  • 2021-04-07
相关资源
相似解决方案