链表又去重

Posted 韩旭051

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链表又去重相关的知识,希望对你有一定的参考价值。

还是链表 操作 这次 全部重复都要去掉
描述
给出一个升序排序的链表,删除链表中的所有重复出现的元素,只保留原链表中只出现一次的元素。
例如:
给出的链表为1 \\to 2\\to 3\\to 3\\to 4\\to 4\\to51→2→3→3→4→4→5, 返回1\\to 2\\to51→2→5.
给出的链表为1\\to1 \\to 1\\to 2 \\to 31→1→1→2→3, 返回2\\to 32→3.

示例1
输入:
{1,2,2}
复制
返回值:
{1}

public class Solution {
    public ListNode deleteDuplicates(ListNode head) {
        if(head==null) return null;
        ListNode head0 = new ListNode(Integer.MIN_VALUE);
        head0.next=head;
        ListNode prev=head0,before=head0;// pre 走的慢
        while(head!=null)
        {   // 和前面 不一样                 // 和 后面也不一样
            if(head.val!=before.val && (head.next==null || head.next.val!=head.val))// 这个节点是 独一无二的 后面不会再出现
            {
                prev.next=head;//这个才修改了节点
                prev=prev.next;
            }
            head=head.next;// 走的快
            before=before.next;// 新节点开始往后走 慢一步
        }
        prev.next=null;
        return head0.next;
    }
}

以上是关于链表又去重的主要内容,如果未能解决你的问题,请参考以下文章

HDU 4585 Shaolin (set的应用)

LinkedList

代码模板实现双向链表的去重拼接合并排序

L2-002. 链表去重

L2-2. 链表去重

pat L2-002 链表去重