`

Remove Duplicate from List(链表去重)

阅读更多
之前在一篇文章里总结了一部分链表的题目,这里主要例举一下链表去重的问题。链表去重有很多种情况,有些要求我们只保留单独出现的元素,有些要求我们使重复的元素只能出现一次。对于可能会删除头结点的题目,我们一般采用新建一个helper节点,使helper指向head,进行操作,最后返回helper.next就可以了。下面是leetcode中有关链表去重的一些题目

1,Remove Duplicates from Sorted List
给定一个链表,去除重复的元素,使每个元素最多出现一次。
例如:给定 1->1->2, 返回 1->2.
给定 1->1->2->3->3, 返回 1->2->3.

使用一个helper保留头结点,然后依次遍历链表。代码如下:
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    public ListNode deleteDuplicates(ListNode head) {
        if(head == null) return null;
        ListNode helper = head;
        while(head.next != null) {
            if(head.val == head.next.val) {
                head.next = head.next.next;
            } else {
                head = head.next;
            }
        }
        return helper;
    }
}


2,Remove Duplicates from Sorted List II
给定一个链表,要求删除重复的元素,只保留单独的元素。
例如:给定 1->2->3->3->4->4->5, 返回 1->2->5.
给定 1->1->1->2->3, 返回 2->3.

因为头结点有可能被删除,此时我们用一个helper指向当前的头节点,进行遍历。代码如下:
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    public ListNode deleteDuplicates(ListNode head) {
        if(head == null) return head;
        ListNode helper = new ListNode(0);
        helper.next = head;
        head = helper;
        while(head.next != null && head.next.next != null) {
            if(head.next.val == head.next.next.val){
                int value = head.next.val;
                while(head.next != null && head.next.val == value){
                    head.next = head.next.next;
                }
            } else {
                head = head.next;
            }
        }
        return helper.next;
    }
}


3,Remove Linked List Elements
给定一个链表,一个目标元素target,删除链表中所有值为target的元素。
例如:给定: 1 --> 2 --> 6 --> 3 --> 4 --> 5 --> 6, target = 6
返回: 1 --> 2 --> 3 --> 4 --> 5

我们分析这道题,因为头结点也可能被删除,所以我们的创建一个helper节点,指向head节点。代码如下:
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    public ListNode removeElements(ListNode head, int val) {
        ListNode helper = new ListNode(0);
        helper.next = head;
        head = helper;
        while(head.next != null) {
            while(head.next != null && head.next.val == val) {
                head.next = head.next.next;
            }
            if(head.next != null)
                head = head.next;
            else
                break;
        }
        return helper.next;
    }
}

链表总结这篇文章里介绍了在一个未排序的链表中删除节点,以及其它相似的问题,有兴趣的可以查看。
分享到:
评论

相关推荐

    Duplicate Cleaner Pro 文件去重工具

    《Duplicate Cleaner Pro:高效精准的文件去重利器》 在我们的日常工作中,无论是个人电脑还是企业服务器,都可能面临文件堆积、重复数据占用大量存储空间的问题。这时,一款高效的文件去重工具就显得尤为重要。...

    Oracle 11gR2 使用 RMAN duplicate from active database 复制数据库

    Oracle 11gR2 使用 RMAN duplicate from active database 复制数据库 Oracle 11gR2 中使用 RMAN duplicate from active database 复制数据库是一种高效的数据库复制方法。这种方法可以直接从活动数据库复制,省去...

    Vistanita Duplicate Finder 文件去重

    文件去重是Vistanita Duplicate Finder的核心功能。它通过高级的文件比较算法,如哈希对比,快速识别出内容完全一样的文件,无论这些文件的文件名是否相同。这种方法确保了查找出的重复文件是真正意义上的复制品,而...

    最好用的文件去重Duplicate Cleaner Pro v3.24专业破解版

    文件去重Duplicate Cleaner Pro v3.24专业破解版 Duplicate Cleaner 是一款可以帮助你在你的计算机上找到并且清除副本文件的简单易用的软件。你可以立即搜索多个文件夹结构并且设置识别副本文件的标准。你可以选择...

    Java数组去重 集合List去重的常用方法总结

    public static List<Integer> removeDuplicate1(List<Integer> list) { for (int i = 0; i < list.size() - 1; i++) { for (int j = list.size() - 1; j > i; j--) { if (list.get(j).equals(list.get(i))) { ...

    删除重复网址*Remove Duplicate URL*去重复url

    删除重复 去重复url 删除重复网址 remove duplicate url 一个国外的删除重复网址软件

    Remove Duplicate Lines:删除文本文件中的重复行-开源

    "Remove Duplicate Lines" 是一个针对这个问题的开源软件,它提供了一个图形化的用户界面,使得用户能够轻松地从文本文件中删除重复的行,从而提高工作效率。这个工具对于那些需要处理大量文本数据并确保数据唯一性...

    删除List中的重复值

    public static void removeDuplicate(List list) { for ( int i = 0 ; i < list.size() - 1 ; i ++ ) { for ( int j = list.size() - 1 ; j > i; j -- ) { if (list.get(j).equals(list.get(i))) { list....

    python列表练习-列表如何去重(不使用用set或者dict)(csdn)————程序.pdf

    如果次数大于1,并且该元素及其出现次数还未被记录(即`(i, li.count(i)) not in duplicate_list`),就将其添加到`duplicate_list`中。这样,我们得到了一个包含重复元素及其重复次数的元组列表。 2. **删除重复...

    Remove Duplicate Email-crx插件

    "Remove Duplicate Email-crx插件"是一款专门针对电子邮件营销领域设计的Chrome浏览器扩展程序。它旨在帮助用户在进行电子邮件营销活动时,有效地去除邮箱列表中的重复条目,从而提高工作效率和邮件发送的准确性。 ...

    LeetCode Remove Duplicates from Sorted Array解决方案

    "LeetCode Remove Duplicates from Sorted Array解决方案" 本文将详细介绍 LeetCode 中的 Remove Duplicates from Sorted Array 解决方案,包括问题描述、解决方案和关键知识点。 问题描述: 给定一个排序的数组 ...

    Android List删除重复数据

    public static void removeDuplicate(List list) { for (int i = 0; i < list.size() - 1; i++) { for (int j = list.size() - 1; j > i; j--) { if (list.get(j).equals(list.get(i))) { list.remove(j); } }...

    Remove-duplicate-fasta:Python脚本删除重复的Fasta序列

    -Python script to remove whole duplicate fasta sequences i.e identical sequence and header -input file must be in fasta format usage: python remove_duplicate_fasta.py inputfile outputfile 例子: ...

    循环链表实验报告(word文档,详细解说)

    `firstElement` 返回第一个元素,`includes` 判断元素是否存在,`isEmpty` 检查链表是否为空,`removeFirst` 删除首个元素,`deletdAllValues` 清空链表,`duplicate` 复制整个链表。 在实际编程过程中,理解这些...

    Labview去处掉数组重复的元素

    this vi is capble to remove the duplicated elements in the labview array.

    remove-duplicate-items-js-problem:使用JS删除重复项

    删除重复项目标:此分配的目的是使用迭代器或使用诸如Set内置对象从数组中删除重复项。...Add the remote to the starter codegit remote add starter ...问题如果有任何问题,在处提出问题

    Outlook去重复邮件的小工具

    Outlook去重复邮件的小工具。用ODIR,这个软件很简单,N年前用过DR,还要收费,这个软件Outlook Duplicate Items Remover是免费的!

    SQL删除重复列

    在数据库管理与维护过程中,数据清洗是一项非常重要的工作,而删除重复记录(或称为去重)是数据清洗中的常见需求之一。本文将围绕“SQL删除重复列”的主题,深入探讨如何有效地利用SQL语句来处理表中的重复数据。 ...

    JS实现数组去重及数组内对象去重功能示例

    最后,如果不需要根据对象的属性去重,则直接使用Array.from()和new Set()组合来去除数组中的重复元素。 需要注意的是,尽管ES6提供了更为高效和简洁的语法来实现数组去重,但在某些旧版浏览器或环境中可能不被支持...

    使用RMAN DUPLICATE...FROM ACTIVE DATABASE 创建物理备库.docx

    【使用RMAN DUPLICATE...FROM ACTIVE DATABASE 创建物理备库】 在Oracle数据库管理中,创建物理备用数据库(Physical Standby Database)是数据保护策略的重要组成部分,主要用于实现Data Guard环境中的灾难恢复和...

Global site tag (gtag.js) - Google Analytics