跳转至

203. Remove Linked List Elements

Leetcode Linked List

Remove all elements from a linked list of integers that have value val.

Example:

Input:  1->2->6->3->4->5->6, val = 6
Output: 1->2->3->4->5

分析

一一比对节点元素,然后删除匹配元素,需要注意的是删除匹配的头部元素,采取两种方案

  • 直接删除头部元素
  • 加入dummynode,将头部元素按正常元素处理

结果是第一种方法快,但是代码量比较多。

    public ListNode removeElements(ListNode head, int val) {
        if(head == null) return null;

        // 处理头部元素
        while (head.val == val) {
            head = head.next;
            if (head == null) return null;
        }

        // 正常节点
        ListNode pos = head;
        while (pos.next != null)
            if (pos.next.val == val) pos.next = pos.next.next;
            else pos =  pos.next;
        return head;
    }

对于头部元素的删除,采用另一种更加简便的方法: 加入dummy node

public ListNode removeElementsUsingDummy(ListNode head, int val) {
    ListNode dummy = new ListNode(0);
    dummy.next = head;
    ListNode pos = dummy;

    while (pos.next != null)
        if (pos.next.val == val) pos.next = pos.next.next;
        else pos = pos.next;
    return dummy.next;
}