-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathLinkedList.java
More file actions
112 lines (103 loc) · 2.52 KB
/
LinkedList.java
File metadata and controls
112 lines (103 loc) · 2.52 KB
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
public class LinkedList {
Node head, tail;
int size;
public LinkedList() {
this.head = null;
this.tail = null;
this.size = 0;
}
public LinkedList(Node start) {
this.head = start;
this.tail = start;
this.size = 1;
if (start != null)
start.setPrev(null);
}
public Node getHead() {
return head;
}
public Node getTail() {
return tail;
}
public int getSize() {
return size;
}
public void add(Node obj, Node prev) {
if (prev == null) {
obj.setNext(head);
obj.setPrev(null);
if (size > 0)
head.setPrev(obj);
head = obj;
if (size == 0) {
tail = obj;
}
size++;
} else if (prev == tail) {
addToEnd(obj);
} else {
obj.setNext(prev.getNext());
obj.setPrev(prev);
prev.setNext(obj);
if (obj.getNext() != null)
((Node) obj.getNext()).setPrev(obj);
size++;
}
}
public void addToEnd(Node obj) {
if (size == 0) {
head = obj;
tail = obj;
} else {
tail.setNext(obj);
obj.setPrev(tail);
tail = obj;
}
size++;
}
public void remove(Node prev) {
Node p, n;
if (prev == null) {
p = head;
head = (Node) p.getNext();
p.setNext(null);
if (head != null)
head.setPrev(null);
if (size == 1)
tail = null;
} else {
p = (Node) prev.getNext();
n = (Node) p.getNext();
if (n != null)
n.setPrev(prev);
prev.setNext(n);
p.setNext(null);
p.setPrev(null);
if (p.equals(tail)) {
if (n != null)
tail = n;
else
tail = prev;
}
}
size--;
}
public Node getIndex(int index) {
if (index < 0 || index > size - 1) {
return null;
}
Node p;
if (index < size / 2) {
p = head;
for (int i = 0; i < index; i++) {
p = (Node) p.getNext();
}
} else {
p = tail;
for (int i = size - 1; i > index; i--) {
p = (Node) p.getPrev();
}
}
return p;
}
}