一,问题描述

请自己构造一个简单的有序单链表,然后实现删除链表中的重复结点。比如:

二,问题分析

首先要实现一个单链表,因此需要定义一个节点类Node。其次,实现向链表中添加结点的方法(使用尾插法)addNode

删除重复结点的实现思路:

定义两个指针:pre 和 next。初始时,pre指向链表中的第一个元素,next指向链表中的第二个元素。如果 pre 的值与 next 的值不相等,则两个指针分别都向后移一个结点;若相等,则删除 next 指针指向的结点即可。

三,整个代码实现

// delete duplicated nodes in increased list
public class MyLinkedList {private class Node{int ele;Node next;public Node(int ele) {this.ele = ele;next = null;}}private Node head;private Node tail;//采用尾插法添加结点public void addNode(int ele){Node newNode = new Node(ele);if(tail != null)tail.next = newNode;else{// first nodehead = newNode;}tail = newNode;}//删除有序单链表中的重复结点public void delDuplicatedNode(){if(head == null)return;Node pre,next;pre = head;next = head.next;while(next != null){if(pre.ele != next.ele){pre = next;next = next.next;}else{//delete next point nodeNode delNode = next;pre.next = next.next;next = next.next;delNode.next = null;//avoid memory leak
//                delNode = null;}}}@Overridepublic String toString() {if(head == null)return "null";Node current = head;StringBuilder sb = new StringBuilder();while(current != null){sb.append(current.ele + " ");current = current.next;}return sb.toString();}//hapjin testpublic static void main(String[] args) {MyLinkedList mylist = new MyLinkedList();int[] eles = {1,2,3,3,4,4,5};for (int ele : eles) {mylist.addNode(ele);}System.out.println("before del: " + mylist);mylist.delDuplicatedNode();System.out.println("after del: " + mylist);}
}
本文转自hapjin博客园博客,原文链接:http://www.cnblogs.com/hapjin/,如需转载请自行联系原作者

删除有序链表中的重复结点相关推荐

  1. leetcode83,删除有序链表中的重复元素

    Given a sorted linked list, delete all duplicates such that each element appear only once. For examp ...

  2. 删除单链表中的重复节点(c语言版本)

    这是一道经典的面试题,下面是我的研究和举一反三,特整理如下: 分为三种情形: (1)删除有序链表的重复节点,重复节点一个都不留 (2)删除有序链表的重复节点,重复节点只留一个 (3)删除无序链表的重复 ...

  3. 《剑指offer》-- 两个链表的第一个公共结点、链表中环的入口结点、删除链表中的重复结点

    一.两个链表的第一个公共结点: 1.题目: 输入两个链表,找出它们的第一个公共结点. 2.解题思路: (1)第一种:找出两个链表的长度,然后让长的链表先走两个链表的长度差,接着两个链表一起走. (2) ...

  4. 牛客题霸 [删除有序链表中重复的元素] C++题解/答案

    牛客题霸 [删除有序链表中重复的元素] C++题解/答案 题目描述 删除给出链表中的重复元素(链表中元素从小到大有序),使链表中的所有元素都只出现一次 例如: 给出的链表为1\to1\to21→1→2 ...

  5. list元素求和_LeetCode刷题实战82:删除排序链表中的重复元素 II

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  6. 31. Leetcode 82. 删除排序链表中的重复元素 II (链表-双指针)

    给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 .返回 已排序的链表 .示例 1:输入:head = [1,2,3,3,4,4,5] 输出:[1,2,5] ...

  7. 删除单链表中的重复节点

    删除单链表中的重复节点 一.题目描述 已知单链表L,写一算法,删除其中的重复节点.(更好的阅读体验,请访问程序员在旅途) 二.分析解答 2.1 知识点分析 本题主要考察链表的相关知识点,其中包括:单链 ...

  8. Leetcode 129求根节点到叶节点数字之和、104二叉树的最大深度、8字符串转换整数(atoi)、82删除排序链表中的重复元素II、204二分查找、94二叉树的中序遍历、144二叉树的前序遍历

    Top1:Leetcode 129求根节点到叶节点数字之和 官方题解:https://leetcode.cn/problems/sum-root-to-leaf-numbers/solution/qi ...

  9. 算法---删除排序链表中的重复元素 II

    删除排序链表中的重复元素 II 给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 .返回 已排序的链表 . 输入:head = [1,2,3,3,4,4,5] ...

最新文章

  1. MongoDB探索之路(二)——系统设计之CRUD
  2. python向文档中输入内容_python处理文档:把选择题的答案选项对应的内容填到选择题题目的括号里面输入的文本...
  3. python语言中文社区-Python 之父谈 Python-Go语言中文社区
  4. Access2007中如何运行SQL执行SQl语句
  5. pb,json,二进制,xml数据对比
  6. 【DP】【容斥】Nice to Meet You(AT3634)
  7. [Leedcode][JAVA][第15题][三数之和][数组][双指针]
  8. Linux进程全解12——lIPC机制之管道,SystemV IPC介绍
  9. 怎么从计算机上删除东西吗,怎么在电脑中删除不想要的软件
  10. linux java 文件夹创建失败_Linux文件夹文件创建、删除
  11. 3d 室内地图_微软科研人员欲通过3D点云混淆技术保护AR定位隐私
  12. 【函数计算月报】2018年10月刊
  13. python 类装饰器和继承_python装饰器、继承、元类、mixin,四种給类动态添加类属性和方法的方式(一)...
  14. mysql带参数游标_mysql游标的使用
  15. 关于如何阅读英文文献(干货详解)
  16. java栅栏_Java多线程 5.栅栏
  17. HTC Vive开发笔记之手柄控制
  18. DOM自定义属性 getAttribute、setAttribute、removeAttribute
  19. docx行间距怎么设置_word怎么调整行间距的两种方法
  20. stm32外设-DMA

热门文章

  1. 随机验证码。 * 随机生成十组六位字符组成的验证码。 * 验证码由大小写字母、数字字符组成。
  2. WebView.onDraw (Android 4.1)
  3. WebKit 内核源码分析 (二) FrameLoader
  4. Android 高级Drawable资源---复合Drawable----变换Drawable
  5. @Value@PropertySource@ConfigurationProperties注解使用
  6. Java基础—异常分类及处理
  7. HBase—基础介绍
  8. HihoCoder - 1174 拓扑排序·一
  9. tomcat JRE_HOME
  10. 洛谷 P2046 BZOJ 2007 海拔(NOI2010)