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