链表去重

来源:互联网 发布:河图 知乎 编辑:程序博客网 时间:2024/06/10 13:05

题目

在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,
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;    }
0 0