[LeetCode] Remove Linked List Elements

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

Example
Given: 1 --> 2 --> 6 --> 3 --> 4 --> 5 --> 6, val = 6
Return: 1 --> 2 --> 3 --> 4 --> 5

思路:建立一个新链头,然后遍历head,要注意对最后一个数据的处理

时间复杂度 O(n)

代码:

    public ListNode removeElements(ListNode head, int val) {

        ListNode node=new ListNode(val==Integer.MIN_VALUE?val+1:val-1);

        ListNode indexNode=node;

        ListNode t=head;

        while(t!=null)

        {

            if(t.val!=val)

            {

                indexNode.next=t;

                indexNode=indexNode.next;

            }

            else 

            {

                if(t.next==null)//the last one

                {

                    indexNode.next=null;

                }

            }

            t=t.next;

        }

        return node.next;

    }

优化

  上面的代码思路是将head遍历往node里面填充,这里是之间将head链接到node下,然后采用两个指针遍历,一个不断前进,一个指向最后一个符合要求的节点

    public ListNode removeElements(ListNode head, int val) {

        ListNode node=new ListNode(0);

        node.next=head;

        ListNode indexNode=node;

        ListNode t=head;

        while(t!=null)

        {

            if(t.val==val)

            {

                indexNode.next=t.next;

            }

            else 

            {

                indexNode=indexNode.next;

            }

            t=t.next;

        }

        return node.next;

    }

 

你可能感兴趣的:(LeetCode)