-
Notifications
You must be signed in to change notification settings - Fork 9
/
LinkedNode
53 lines (41 loc) · 1.24 KB
/
LinkedNode
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
public class LinkedNode {
private LinkedNode mPrev;
private LinkedNode mNext;
public LinkedNode() {
mPrev = mNext = this;
}
public void insert(LinkedNode node) {
node.mNext = mNext;
mNext.mPrev = node;
node.mPrev = this;
mNext = node;
}
public void remove() {
if (mNext == this) throw new IllegalStateException();
mPrev.mNext = mNext;
mNext.mPrev = mPrev;
mPrev = mNext = null;
}
@SuppressWarnings("unchecked")
public static class List<T extends LinkedNode> {
private LinkedNode mHead = new LinkedNode();
public void insertLast(T node) {
mHead.mPrev.insert(node);
}
public T getFirst() {
return (T) (mHead.mNext == mHead ? null : mHead.mNext);
}
public T getLast() {
return (T) (mHead.mPrev == mHead ? null : mHead.mPrev);
}
public T nextOf(T node) {
return (T) (node.mNext == mHead ? null : node.mNext);
}
public T previousOf(T node) {
return (T) (node.mPrev == mHead ? null : node.mPrev);
}
}
public static <T extends LinkedNode> List<T> newList() {
return new List<T>();
}
}