当前位置:  技术问答>java相关

请问java里的链表是怎么做的?

    来源: 互联网  发布时间:2015-09-13

    本文导语:  那里有代码可以看看 | jdk就有啊,在jdk1.3src.jar 解开 在srcjavautilLinkedList.java | /*  * Copyright (c) 2000 David Flanagan.  All rights reserved.  * This code is from the book Java Examples...

那里有代码可以看看

|
jdk就有啊,在jdk1.3src.jar 解开 在srcjavautilLinkedList.java

|
/*
 * Copyright (c) 2000 David Flanagan.  All rights reserved.
 * This code is from the book Java Examples in a Nutshell, 2nd Edition.
 * It is provided AS-IS, WITHOUT ANY WARRANTY either expressed or implied.
 * You may study, use, and modify it for any non-commercial purpose.
 * You may distribute it non-commercially as long as you retain this notice.
 * For a commercial use license, or to purchase the book (recommended),
 * visit http://www.davidflanagan.com/javaexamples2.
 */
package com.davidflanagan.examples.classes;

/**
 * This class implements a linked list that can contain any type of object
 * that implements the nested Linkable interface.  Note that the methods are
 * all synchronized, so that it can safely be used by multiple threads at
 * the same time.
 **/
public class LinkedList {
    /** 
     * This interface defines the methods required by any object that can be
     * linked into a linked list.
     **/
    public interface Linkable {
        public Linkable getNext();     // Returns the next element in the list
        public void setNext(Linkable node); // Sets the next element in the list
    }

    // This class has a default constructor: public LinkedList() {}

    /** This is the only field of the class.  It holds the head of the list */
    Linkable head;

    /** Return the first node in the list */
    public synchronized Linkable getHead() { return head; }

    /** Insert a node at the beginning of the list */
    public synchronized void insertAtHead(Linkable node) {
        node.setNext(head);
        head = node;
    }

    /** Insert a node at the end of the list */
    public synchronized void insertAtTail(Linkable node) {
        if (head == null) head = node;
        else {
            Linkable p, q;
            for(p = head; (q = p.getNext()) != null; p = q) /* no body */;
            p.setNext(node);
        }
    }

    /** Remove and return the node at the head of the list */
    public synchronized Linkable removeFromHead() {
        Linkable node = head;
        if (node != null) {
            head = node.getNext();
            node.setNext(null);
        }
        return node;
    }

    /** Remove and return the node at the end of the list */
    public synchronized Linkable removeFromTail() {
        if (head == null) return null;
        Linkable p = head, q = null, next = head.getNext();
        if (next == null) {
            head = null;
            return p;
        }
        while((next = p.getNext()) != null) { 
            q = p; 
            p = next;
        }
        q.setNext(null);
        return p;
    }

    /** 
     * Remove a node matching the specified node from the list.  
     * Use equals() instead of == to test for a matched node.
     **/
    public synchronized void remove(Linkable node) {
        if (head == null) return;
        if (node.equals(head)) { 
            head = head.getNext(); 
            return;
        }
        Linkable p = head, q = null;
        while((q = p.getNext()) != null) {
            if (node.equals(q)) {
                p.setNext(q.getNext());
                return;
            }
            p = q;
        }
    }
    
    /** This nested class defines a main() method that tests LinkedList */
    public static class Test {
        /**
 * This is a test class that implements the Linkable interface
 **/
        static class LinkableInteger implements Linkable {
            int i;          // The data contained in the node
            Linkable next;  // A reference to the next node in the list
            public LinkableInteger(int i) { this.i = i; }  // Constructor
            public Linkable getNext() { return next; }     // Part of Linkable
            public void setNext(Linkable node) { next = node; } // Linkable
            public String toString() { return i + ""; }    // For easy printing
            public boolean equals(Object o) {              // For comparison
                if (this == o) return true;
                if (!(o instanceof LinkableInteger)) return false;
                if (((LinkableInteger)o).i == this.i) return true;
                return false;
            }
        }

        /**
 * The test program.  Insert some nodes, remove some nodes, then
 * print out all elements in the list.  It should print out the
 * numbers 4, 6, 3, 1, and 5
 **/
        public static void main(String[] args) {
            LinkedList ll = new LinkedList();         // Create a list
            ll.insertAtHead(new LinkableInteger(1));  // Insert some stuff
            ll.insertAtHead(new LinkableInteger(2));
            ll.insertAtHead(new LinkableInteger(3));
            ll.insertAtHead(new LinkableInteger(4));
            ll.insertAtTail(new LinkableInteger(5));
            ll.insertAtTail(new LinkableInteger(6));
            System.out.println(ll.removeFromHead()); // Remove and print a node
            System.out.println(ll.removeFromTail()); // Remove and print again
            ll.remove(new LinkableInteger(2));       // Remove another one

            // Now print out the contents of the list.
            for(Linkable l = ll.getHead(); l != null; l = l.getNext())
                System.out.println(l);
        }
    }
}


    
 
 

您可能感兴趣的文章:

  • 请问Java高手,Java的优势在那里??,Java主要适合于开发哪类应用程序
  • 请问JAVA如何定义常量实行多个JAVA程序共用?
  • 请问java2与java1.1差别大不大
  • 初学JAVA,请问各位哪本数据结构(JAVA版)比较好?
  • 急!请问有分析java程序性能瓶颈的工具吗?例如,统计 java 程序中函数调用次数?
  • 请问Java的各位仁兄那个Java 2 Runtime Environment在哪里安装的?
  • 本人想学java,请问java程序员的待遇如何,和java主要有几个比较强的方向
  • 请问Java能干什么,java vm的速度是在是太慢!
  • 我没用过Java,请问各位大侠Java中除了/*...*/用作注释外,还有什么符号可用于注释符?
  • 请问Java TM Programming Language中的TM(在Java的右角上)是什么意思啊?
  • 请问大家用什么开发java程序,我基本上学会了java语法,不知用什么来开发它?
  • 请问:java 入门以及学好Java要看哪些书籍阿????
  • 请问哪里有java docs 的下载,中文版的,它是java的类库手册么?
  • 请问java高手,谁知道java怎么用 *.dll ???
  • 请问::大家用Java是做application还是applet?我要是学Java,重点放在那儿部分?
  • 请问各位大虾,小弟今天开始学jsp了,这学期我们有java课,所以已经下载了jdk(好象是1.2),请问我的98环境怎么配置jsp环境呀?我的jdk可以运行.java程序,别的我就不知道了....谢谢!
  • 请问:在哪里能找到JAVA编译器和解释器?我是一个初学者。我想学JAVA。
  • 各位,我是一个JAVA的初学者,想买有关JAVA的参考书,请问什么书好?
  • 我是一名JAVA初学者,请问哪里有比较好的JAVA的源程序下载
  • 请问java程序中的import为什么有的用java.….*,而有的又用java.….…,有什么区别吗?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请问:我知道路由器的telnet密码,但忘记了enable 密码,请问如何是好?
  • 请问那里有SYBASE的jbdb 2.0下载;jspsmartupload可以直接将文件上传到数据库,请问如何使用
  • 请问最新的reahat9.0是基于什么核心的?2.4?2.6?请问那里能下载?
  • 请问:请问哪里有关于linux基本操作命令讲解的资料下载,最好是幻灯片格式的.
  • 请问,我试图用#admintool&图形工具命令来安装sun workshop5.0,为什么进入的却是用户管理界面?请问具体该如何在solaris下安装应用软件
  • 请问在Redhat 9里,我从登录就是图形介面,请问如何在图形介面内进入命令行方式呢,谢谢
  • 请问玩过SOLARIS的高手门,在不正常关机后,就不能启动到windows公用桌面了,只能在命令提示模式下了,请问怎么解决这个问题啊?急~!~!
  • 请问:我在redhat下装了bochs-2.2.1-1.rpm,.装了后,想设置一下,但找不到bochsrc.fda.bxrc,请问这个文件在哪个曰录下啊。
  • 请问:在配置Qt时,很多文档都说在.profile,.login里加东西,但是我好像没有发现有这两个文件上,请问这些文件在哪个目录下啊
  • 请问:在GCC里的C程序里的变量的声明是不是只能在前面,而且相同类型的变量的声明只能放在一起?如果不是,请问怎么样可以解决这个问题.
  • 主机是WIN2000,我用的是LUNIX,请问是否可以共享上网? 如果可以请问如何设置? 500分答谢,龟儿食言!
  • 请问linux下GUI开发的问题!
  • 请问出现fstab文件丢失该怎么修复呀?
  • 请问这个方法如何调用?
  • 请问一个奇怪的问题!
  • 请问在网页中打开的新窗口,如何让其居中。
  • 请问我该学什么了
  • 请问安装zhcon,cxterm问题
  • 非常急! 请问daemontools 在red hat 9下的安装问题? 在线等待
  • 请问如何在一台单机上装VMware的网络访问问题?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3