博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
删除有序链表中的重复结点
阅读量:6075 次
发布时间:2019-06-20

本文共 2029 字,大约阅读时间需要 6 分钟。

一,问题描述

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

 

二,问题分析

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

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

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

 

三,整个代码实现

// delete duplicated nodes in increased listpublic 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 node head = 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 node Node delNode = next; pre.next = next.next; next = next.next; delNode.next = null;//avoid memory leak// delNode = null; } } } @Override public 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 test public 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); }}

 

转载地址:http://djxgx.baihongyu.com/

你可能感兴趣的文章
遍历String字符串,得到出现次数最多的字母
查看>>
hw4 打卡
查看>>
【人脸识别——Dlib学习2】Face Landmark Detection
查看>>
json串技术
查看>>
excel转出MySql数据库数据
查看>>
请求https前缀的网站验证SSL证书的解决方案之一
查看>>
[leetcode-2-Add Two Numbers]
查看>>
POJ 3662 (二分+SPFA
查看>>
地区切换
查看>>
uva-108-贪心
查看>>
2018 OCP 052最新题库及答案-4
查看>>
当索引没有0时的解决方案
查看>>
(转)android UI进阶之实现listview的分页加载
查看>>
myBatis性能优化【转】
查看>>
ros和Android(一)
查看>>
日志log使用序列反序列加密(Serializer) DESCrypto 加密
查看>>
从第一行代码开始开发区块链(二)
查看>>
anjularjs 过滤器
查看>>
iOS当中一些常见的面试题
查看>>
leetcode-350-Intersection of Two Arrays II(求两个数组的交集)
查看>>