java数据结构之实现双向链表的示例
复制代码 代码如下: /** * 双向链表的实现 * @author Skip * @version 1.0 */ public class DoubleNodeList<T> { //节点类 private static class Node<T>{ Node<T> perv; //前节点 Node<T> next; //后节点 T data; //数据 public Node(T t){ this.data = t; } } private Node<T> head; //头节点 private Node<T> last; //尾节点 private Node<T> other; //备用节点存放临时操作 private int length; //链表长度 /** * 无参构造 */ public DoubleNodeList(){ head = new Node<T>(null); last = head; length = 0; } /** * 初始化时创建一个节点 * @param data 数据 */ public DoubleNodeList(T data){ head = new Node<T>(data); last = head; length = 1; } /** * 添加一个节点 * @param data 添加的数据 */ public void add(T data){ if(isEmpty()){ head = new Node<T>(data); last = head; length++; }else{ //尾插法 other = new Node<T>(data); other.perv = last; last.next = other; last = other; length++; } } /** * 在指定数据后插入一个节点 * @param data 指定的数据 * @param insertData 插入的数据 * @return 插入成功返回true,不成功返回false */ public boolean addAfert(T data,T insertData){ other = head; while(other != null){ if(other.data.equals(data)){ Node<T> t = new Node<T>(insertData); t.perv = other; t.next = other.next; other.next = t; //判断是否在最后一个节点后添加节点 if(t.next==null){ last = t; } length++; return true; } other = other.next; } return false; } /** * 在指定数据前插入一个节点 * @param data 指定的数据 * @param insertData 插入的数据 * @return 插入成功返回true,不成功返回false */ public boolean addBefore(T data,T insertData){ other = head; while(other != null){ if(other.data.equals(data)){ Node<T> t = new Node<T>(insertData); t.perv = other.perv; t.next = other; other.perv.next = t; length++; return true; } other = other.next; } return false; } /** * 获得索引处的数据 * @param index 索引 * @return 数据 */ public T get(int index){ if(index>length || index<0){ throw new IndexOutOfBoundsException("索引越界:"+index); } other = head; for(int i=0;i<index;i++){ other = other.next; } return other.data; } /** * 新值替换旧值 * @return 成功为true,未找到为false */ public boolean set(T oldValue,T newValue){ other = head; while(other!=null){ if(other.data.equals(oldValue)){ other.data = newValue; return true; } other = other.next; } return false; } /** (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |