-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathOwnLinkedList.java
128 lines (119 loc) · 3.03 KB
/
OwnLinkedList.java
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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
import java.util.Collection;
public class OwnLinkedList<T> {
Node<T> head;
Node<T> tail;
int length;
public OwnLinkedList() {
head = null;
tail = null;
length = 0;
}
public OwnLinkedList(Collection<T> data){
Node<T> prev = null;
for(T x : data){
Node<T> node = new Node<T>();
node.data = x;
if (prev != null){
prev.next = node;
}else{
head = node;
}
prev = node;
length++;
}
tail = prev;
}
public void insertLast(T value){
Node<T> node = new Node<>();
node.data = value;
tail.next = node;
tail = node;
length++;
}
public void insertFirst(T value){
Node<T> node = new Node<>();
node.data = value;
node.next = head;
head = node;
length++;
}
public void insertAt(T value, int index){
if (index == 0){insertFirst(value);}
else if (index == length-1) {insertLast(value);}
else{
Node<T> newNode = new Node<T>();
newNode.data = value;
Node<T> referenceNode = head;
for(int i = 1; i<index; i++){
referenceNode = referenceNode.next;
}
newNode.next = referenceNode.next;
referenceNode.next = newNode;
length ++;
}
}
public void deleteList(){
if (length == 0) {return;}
head = null;
tail = null;
length = 0;
}
public void deleteFirst(){
if (length == 0){return;}
head = head.next;
length--;
}
public void deleteLast(){
if (length == 1 || length == 0){
deleteList();
return;
}
Node<T> node = head;
while (node.next.next != null){
node = node.next;
}
tail = node;
tail.next = null;
length--;
}
public void deleteAt(int index){
if (index == 0){deleteFirst();}
else if (index == length-1) {deleteLast();}
else{
Node<T> referenceNode = head;
for(int i = 1; i<index; i++){
referenceNode = referenceNode.next;
}
referenceNode.next = referenceNode.next.next;
length --;
}
}
public T getHeadAsValue(){
return head.data;
}
public T getTailAsValue(){
return tail.data;
}
public Node<T> getHead() {
return head;
}
public Node<T> getTail() {
return tail;
}
public int getLength() {
return length;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("{ ");
Node<T> node = head;
while (node.next != null){
sb.append(node.data).append(", ");
node = node.next;
}
sb.append(node.data).append(" }");
sb.append("\nLength: ").append(length);
return sb.toString();
}
}