(82)-(Remove Duplicates from Sorted List II )-(删除重复的节点)-(思路新颖,太棒了简直,要记下来)

(82)-(Remove Duplicates from Sorted List II )-(删除重复的节点)-(思路新颖,太棒了简直,要记下来)

Given a sorted linked list, 
delete all nodes that have duplicate numbers,
 leaving only distinct numbers from the original list.


For example,

Given 1->2->3->3->4->4->5, return 1->2->5.
Given 1->1->1->2->3, return 2->3.

这题的做法是用两个指针pre cur
1.dummy.next= head
2.pre=dummy 
cur=dummy.next
3.当 指针移到 pre.next 和cur.next 不等的位置 将这个位置加入到 pre.next中去 
4.否者就跳过cur
一次遍历 时间是O(n)


public class Solution 
{
   public ListNode deleteDuplicates(ListNode head) 
   {
           ListNode final_ans=new ListNode(0);
        final_ans.next=head;
        
        ListNode pre_node=final_ans; //从0开始
        ListNode curr_node=pre_node.next;//指向当前的节点
        
        while(curr_node !=null)
        {
            while(curr_node.next!=null && pre_node.next.val==curr_node.next.val)
            {
                curr_node=curr_node.next;
            }
            if(pre_node.next==curr_node)
            {
                //如果对于当前开头的点,后面的不存在跟他相等,那么跳过
                pre_node=pre_node.next;
            }
            else
            {
                pre_node.next=curr_node.next;
            }
            
            //由curr_node进行往后走,pre_node不动,方便进行比较值
            curr_node=curr_node.next;
        }
        return final_ans.next; 
   }
}

 

posted @ 2015-07-27 17:49  爱吃萝卜干  阅读(94)  评论(0编辑  收藏  举报