1. 程式人生 > >java 自定義雙向連結串列

java 自定義雙向連結串列


/**
 * 自定義雙向連結串列
 *
 * @author 馮趙楊
 * @date 2018年4月10日
 */
public class DoubleLink<E> {
	private int n;
	private Node first;
	private Node last;

	private class Node {
		E value;
		Node next;
		Node prev;

		@Override
		public String toString() {
			return value + " ";
		}
	}

	/**
	 * 新增
	 * 
	 * @author 馮趙楊
	 */
public void add(E value) { Node oldlast = last; last = new Node(); last.value = value; last.next = null; if (n == 0) { first = last; } else { oldlast.next = last; last.prev = oldlast; last.next = first; //System.out.println("last.value=" + last.value + ",last.prev=" + last.prev + ",last.next=" + last.next);
} n++; } /** * 反轉 * * @author 馮趙楊 */ public DoubleLink<E> reverse(DoubleLink<E> link) { DoubleLink<E> newLink = new DoubleLink<E>(); Node node = link.last; for (int i = 0; i < link.n; i++) { newLink.add(node.value); node = node.prev; } return
newLink; } @Override public String toString() { StringBuilder str = new StringBuilder(); Node node = first; for (int i = 0; i < n; i++) { str.append(node); node = node.next; } return str.toString(); } public static void main(String[] args) { DoubleLink<Integer> doubleLink = new DoubleLink<Integer>(); doubleLink.add(1); doubleLink.add(2); doubleLink.add(3); //原雙向連結串列輸出 System.out.println(doubleLink.toString()); //倒置後雙向連結串列輸出 System.out.println(doubleLink.reverse(doubleLink)); } }