单链表_JAVA描述《数据结构与算法分析》

简介:
节点
package DataStructures;

class ListNode  {
    
    //Frientdly data;accessible by other package routines
    Object element;
    ListNode next;
    
    // Constructers
    ListNode(Object theElement) {
        this(theElement, null);
    }


    ListNode(Object theElement, ListNode n) {
        element = theElement;
        next = n;
    }

}

迭代器
package DataStructures;

public  class LinkedListItr  {
    ListNode current; // Current position

    LinkedListItr(ListNode theNode) {
        current = theNode;
    }


    public boolean IsPastEnd() {
        return current == null;
    }


    public Object Retrive() {
        return IsPastEnd() ? null : current.element;
    }


    public void Advance() {
        if (!IsPastEnd())
            current = current.next;
    }

}


链表类
package DataStructures;

public  class LinkedList  {
    private ListNode header;

    public LinkedList() {
        header = new ListNode(null);
    }


    public boolean IsEmpty() {
        return header.next == null;
    }


    public void makeEmpty() {
        header.next = null;
    }


    public LinkedListItr Zeroth() {
        return new LinkedListItr(header);
    }


    public LinkedListItr First() {
        return new LinkedListItr(header.next);
    }


    /**
     * Return iterator corresponding to the first node containing an item.
     * 
     * 
@param x
     *            the item to search for.
     * 
@return an iterator; iterator IsPastEnd if item is not found.
     
*/

    public LinkedListItr Find(Object x) {
        ListNode itr = header.next;

        while (itr != null && !itr.element.equals(x))
            itr = itr.next;

        return new LinkedListItr(itr);
    }


    /**
     * Remove th first occurrence of an item.
     * 
     * 
@param x
     *            the item to remove.
     
*/

    public void Remove(Object x) {
        LinkedListItr p = FindPrevious(x);

        if (p.current.next != null)
            p.current.next = p.current.next.next; // Bypass deleted node
    }


    /**
     * Return itreator prior to the first node containing an item.
     * 
     * 
@param x
     *            the item to search for.
     * 
@return appropriate iterator if the item is found.Otherwise, the iterator
     *         corresponding to the last element in the lis is returned.
     
*/

    public LinkedListItr FindPrevious(Object x) {
        ListNode itr = header;

        while (itr.next != null && !itr.next.element.equals(x))
            itr = itr.next;

        return new LinkedListItr(itr);
    }


    /**
     * Insert after p.
     * 
     * 
@param x
     *            the item to insear.
     * 
@param p
     *            the position prior to the newly inserted item.
     
*/

    public void Insert(Object x, LinkedListItr p) {
        if (p != null && p.current != null)
            p.current.next = new ListNode(x, p.current.next);
    }


    // Simple print method
    public static void PrintLinkedList(LinkedList theList) {
        if (theList.IsEmpty())
            System.out.print("Empty list");
        else {
            LinkedListItr itr = theList.First();
            for (; !itr.IsPastEnd(); itr.Advance())
                System.out.print(itr.Retrive() + " ");
        }


        System.out.println();
    }

}

本文转自冬冬博客园博客,原文链接:http://www.cnblogs.com/yuandong/archive/2006/08/19/481154.html ,如需转载请自行联系原作者
相关文章
|
8天前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
34 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
8天前
|
存储 Java
【编程基础知识】 分析学生成绩:用Java二维数组存储与输出
本文介绍如何使用Java二维数组存储和处理多个学生的各科成绩,包括成绩的输入、存储及格式化输出,适合初学者实践Java基础知识。
36 1
|
5天前
|
存储 算法 Java
Java常用的数据结构
【10月更文挑战第3天】 在 Java 中,常用的数据结构包括数组、链表、栈、队列、树、图、哈希表和集合。每种数据结构都有其特点和适用场景,如数组适用于快速访问,链表适合频繁插入和删除,栈用于实现后进先出,队列用于先进先出,树和图用于复杂关系的表示和查找,哈希表提供高效的查找性能,集合用于存储不重复的元素。合理选择和组合使用这些数据结构,可以显著提升程序的性能和效率。
|
8天前
|
Java
让星星⭐月亮告诉你,Java synchronized(*.class) synchronized 方法 synchronized(this)分析
本文通过Java代码示例,介绍了`synchronized`关键字在类和实例方法上的使用。总结了三种情况:1) 类级别的锁,多个实例对象在同一时刻只能有一个获取锁;2) 实例方法级别的锁,多个实例对象可以同时执行;3) 同一实例对象的多个线程,同一时刻只能有一个线程执行同步方法。
9 1
|
8天前
|
小程序 Oracle Java
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
这篇文章是关于JVM基础知识的介绍,包括JVM的跨平台和跨语言特性、Class文件格式的详细解析,以及如何使用javap和jclasslib工具来分析Class文件。
21 0
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
|
12天前
|
存储 Java
数据结构第二篇【关于java线性表(顺序表)的基本操作】
数据结构第二篇【关于java线性表(顺序表)的基本操作】
24 6
|
12天前
|
Java 语音技术 容器
java数据结构泛型
java数据结构泛型
23 5
|
10天前
|
算法 搜索推荐 Java
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
这篇文章介绍了如何使用Java后端技术,结合Graphics2D和Echarts等工具,生成包含个性化信息和图表的海报,并提供了详细的代码实现和GitHub项目链接。
30 0
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
|
11天前
|
Java
如何从Java字节码角度分析问题|8月更文挑战
如何从Java字节码角度分析问题|8月更文挑战
|
12天前
|
存储 缓存 Java
【用Java学习数据结构系列】HashMap与TreeMap的区别,以及Map与Set的关系
【用Java学习数据结构系列】HashMap与TreeMap的区别,以及Map与Set的关系
27 1