1 /**
2 * 双端链表的实现
3 */
4 class LinkA {
5 public long dData;
6 public LinkA next;
7
8 public LinkA(long d) {
9 dData = d;
10 }
11
12 public String toString() {
13 return "[" + dData + "]";
14 }
15
16 public void displayLink() {
17 System.out.println(toString());
18 }
19 }
20
21 class FirstLastList {
22 private LinkA first;// 头部
23 private LinkA last;// 尾部
24
25 public FirstLastList() {
26 first = null;
27 last = null;
28 }
29
30 public boolean isEmpty() {
31 return first == null;
32 }
33
34 /**
35 * 在头部插入节点
36 */
37 public void insertFirst(LinkA l) {
38 if (isEmpty())
39 last = l;
40 l.next = first;
41 first = l;
42 }
43
44 /**
45 * 在尾部插入节点
46 *
47 * @param l
48 */
49 public void insertLast(LinkA l) {
50 if (isEmpty())
51 first = l;
52 else
53 last.next = l;
54 last = l;
55 }
56
57 /**
58 * 从头部删除一个节点
59 *
60 * @return
61 */
62 public long deleteFirst() {
63 long temp = first.dData;
64 if (first.next == null)
65 last = null;
66 first = first.next;
67 return temp;
68 }
69
70 public String toString() {
71 if (isEmpty())
72 return "{}";
73 LinkA current = first;
74 StringBuilder sb = new StringBuilder();
75 sb.append("{");
76 while (current != null) {
77 sb.append(current.toString()).append(",");
78 if (current.next == null)
79 break;
80 else
81 current = current.next;
82 }
83 sb.deleteCharAt(sb.length() - 1);
84 sb.append("}");
85 return sb.toString();
86 }
87
88 public void displayList() {
89 System.out.println(toString());
90 }
91 }
92
93 public class FirstLastListDemo {
94 public static void main(String[] args) {
95 FirstLastList fll = new FirstLastList();
96 for (int i = 1; i < 10; i++) {
97 System.out.println("插入:"+i);
98 if (i % 2 == 0)//i为偶数调用insertFirst
99 fll.insertFirst(new LinkA(i));
100 else//i为基数调用insertLast
101 fll.insertLast(new LinkA(i));
102 fll.displayList();
103 }
104 System.out.println("插入完毕开始从头部删除");
105 while(!fll.isEmpty()){
106 fll.deleteFirst();
107 fll.displayList();
108 }
109 }
110 }