java (双)链表实现
来源:互联网 发布:网络培训课程 编辑:程序博客网 时间:2024/05/29 11:00
package hb.struct;/** * 双向链表 * @author huangbiao * @date 2013-9-20 */public class MyList {public static void main(String[] args) {MyList mylist = new MyList();mylist.addFirst("huangbiao_first1");mylist.addFirst("huangbiao_first2");mylist.addLast("huangbiao_last1");mylist.addLast("huangbiao_last2");System.out.println("-------------add(int,Object)-------------------");mylist.add(1, "add(int,Object)");mylist.addBefor("addBefore", mylist.getNode(2));for(int i=0;i<mylist.size;i++){System.out.println(mylist.getNode(i).getItem());}System.out.println("-------------getFirst()-------------------");System.out.println(mylist.getFirst().getItem());System.out.println(mylist.getLast().getItem());System.out.println("-------------remove(Node)-------------------");try {mylist.remove(mylist.getNode(2));} catch (Exception e) {e.printStackTrace();}for(int i=0;i<mylist.size;i++){System.out.println(mylist.getNode(i).getItem());}System.out.println("-------------remove(int)-------------------");try {mylist.remove(2);} catch (Exception e) {e.printStackTrace();}for(int i=0;i<mylist.size;i++){System.out.println(mylist.getNode(i).getItem());}System.out.println("------------removeLast()--------------------");mylist.removeLast();for(int i=0;i<mylist.size;i++){System.out.println(mylist.getNode(i).getItem());}}private Node head;private Node tail;private int size;MyList() {head = new Node();tail = new Node();head.setNext(tail);tail.setPre(head);size = 0;}public Node getNode(int i){Node result = head;if(0<= i && i < size){for (int j = 0; j <= i; j++)result = result.next;}else{return result;}return result;}public Node getFirst(){Node result = null;if(size > 0){result = head.next;}return result;}public Node getLast(){Node result = null;if(size > 0){result = tail.pre;}return result;}private boolean isPositionIndex(int i){return i>=0 && i<=size;}private void checkPositionIndex(int i){if(!isPositionIndex(i)){throw new IndexOutOfBoundsException(outOfBoundsMsg(i));}else{return ;}}private String outOfBoundsMsg(int i) {return (new StringBuilder()).append("Index: ").append(i).append(", Size: ").append(size).toString();}public void addFirst(Object item) {Node n = new Node(item, head, head.getNext());head.getNext().setPre(n);head.setNext(n);size++;}public int size(){return this.size;}public void add(int index,Object item){checkPositionIndex(index);if (index == size)addLast(item);elseaddBefor(item, getNode(index));}public void addBefor(Object obj,Node beforeNode){Node node2 = beforeNode.pre;Node node = new Node(obj,node2,beforeNode);//beforeNode.pre = node;node2.next = node;size++;}public void addLast(Object item) {Node n = new Node(item, tail.getPre(), tail);tail.getPre().setNext(n);tail.setPre(n);size++;}public void remove(Node node) throws Exception {Node n = check(node);n.getPre().setNext(n.getNext());n.getNext().setPre(n.getPre());size--;}public void remove(int index) throws Exception{if(index<=size){Node target = head;for(int i=0;i<this.size;i++){target = target.next;}this.remove(target);}}public void removeLast(){if(size>0){Node last = tail.pre;last.pre.setNext(last.next);last.next.setPre(last.pre);size--;}}protected Node check(Node node) throws Exception {if (node == null) {throw new Exception("节点为空!");}if (node == head) {throw new Exception("节点不能指向头节点!");}if (node == tail) {throw new Exception("节点不能指向尾节点!");}return node;}/** * 定义了一个类为node,用来存储数据 * @author Administrator */private class Node {Object item;Node pre;Node next;Node(Object item, Node pre, Node next) {this.item = item;this.pre = pre;this.next = next;}Node(Object item) {this(item, null, null);}Node() {this(null, null, null);}public Object getItem() {return item;}public void setItem(Object item) {this.item = item;}public Node getPre() {return pre;}public void setPre(Node pre) {this.pre = pre;}public Node getNext() {return next;}public void setNext(Node next) {this.next = next;}}}
打印结果:
-------------add(int,Object)-------------------
huangbiao_first2
add(int,Object)
addBefore
huangbiao_first1
huangbiao_last1
huangbiao_last2
-------------getFirst()-------------------
huangbiao_first2
huangbiao_last2
-------------remove(Node)-------------------
huangbiao_first2
add(int,Object)
huangbiao_first1
huangbiao_last1
huangbiao_last2
-------------remove(int)-------------------
huangbiao_first2
add(int,Object)
huangbiao_first1
huangbiao_last1
------------removeLast()--------------------
huangbiao_first2
add(int,Object)
huangbiao_first1
- java (双)链表实现
- JAVA实现链表
- Java实现链表
- Java实现链表
- java实现链表
- Java 链表实现
- Java实现链表
- java 链表实现
- java实现链表
- java 实现链表
- java实现链表
- java实现链表
- Java实现链表
- Java实现链表
- Java链表实现
- java链表实现
- java 链表实现
- JAVA实现链表
- URLClassLoader 学习笔记
- AWK简介及使用实例
- JavaEE知识整理系列(一)JavaEE概述 .
- Condition使用---线程通信
- (笔记)viewpager显示同时显示多页
- java (双)链表实现
- [SQL Server]统计SQL Server 报表的订阅情况
- 【HM12.0】Data structure and access method
- 系统盘CD的ghost文件不能用解决办法
- 如何在eclipse的WEB-INF文件夹下生成class文件夹
- NSTimer类的使用
- spring配置log4j
- J2EE 报错跳转到指定的 JSP页面
- windows route命令详解