双向链表:每个结点有包含两个指针,一个指向前一个结点的引用,一个指向后一个结点的引用;
结点类
package DoubleLink; /** * Created by Zz on 2017/5/5 0005. */ public class Node { public Node next; public Node previous; private int data; public Node(int data) { this.data = data; } public String toString(){ return data+" "; } public int getData() { return data; } public void setData(int data) { this.data = data; } public boolean equals(Object other) { Node temp = null; if (other instanceof Node) { temp = (Node)other; if (temp.getData() == this.getData()) { return true; }else { return false; } }else { return false; } } }
DoubleLink实现
package DoubleLink; /** * Created by Zz on 2017/5/5 0005. */ public class DoubleLink { private Node first; private Node end; public void addFirst(int data) { Node node = new Node(data); if (first!=null) { node.next = first; first.previous = node; first = node; } else { first = node; end = node; } } public void addEnd(int data) { Node node = new Node(data); if(end!=null) { end.next = node; node.previous = end; end = node; } else { first = node; end = node; } } public Node find(int data) { Node temp = new Node(data); Node f = first; while (f!=null) { if (f.equals(temp)) break; else f = f.next; } return f; } public void delete(int data) { Node node = find(data); if (node!=null) { node.previous.next = node.next; node.next.previous = node.previous; } } public void update(int ydata,int mdata) { Node node = find(ydata); node.setData(mdata); } public String toString() { StringBuffer stringBuffer = new StringBuffer(); Node temp = first; while (temp!=null) { if (temp == end) stringBuffer.append("["+temp.getData()+"]"); else stringBuffer.append("["+temp.getData()+"]"+","); temp = temp.next; } return stringBuffer.toString(); } }
运行结果:
public static void main(String[] args) { DoubleLink doubleLink = new DoubleLink(); doubleLink.addFirst(10); doubleLink.addFirst(20); doubleLink.addFirst(30); doubleLink.addEnd(40); doubleLink.addEnd(50); System.out.println(doubleLink.toString()); }
[30],[20],[10],[40],[50]