题目
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,
1、重复的结点不保留,返回链表头指针。
public ListNode deleteDuplicates(ListNode head) {
if(head==null)
return null;
ListNode cur=head;
while(cur!=null && cur.next!=null){
if(cur.val==cur.next.val){
cur.next=cur.next.next;
}
else{
cur=cur.next;
}
}
return head;
}
2、重复节点保留
例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
1、链表头可能被删除,在前面再加一个head节点,
2、如果当前元素没有重复的,则加入列表中
3、如何判断当前元素有没有重复,使用一个指针记录当前元素第一次出现的节点,然后第二个指针遍历具有相同元素的节点,便利完之后,比较第一个指针和第二个指针指向的节点,如果他们指向同一个节点,意味着该元素没有重复。
public ListNode deleteDuplicates(ListNode head) {
ListNode dummy=new ListNode(0);
dummy.next=head;
ListNode pre=dummy;
ListNode cur=head;
while(cur!=null){
while(cur.next!=null && cur.next.val==cur.val){
cur=cur.next;
}
if(pre.next==cur){
pre=pre.next;
}
else{
pre.next=cur.next;
}
cur=cur.next;
}
return dummy.next;
}