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