[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;
    }

 

posted @ 2015-07-13 16:19  Maydow  阅读(114)  评论(0编辑  收藏  举报