版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35529801/article/details/79772925
public class MyLinkedList<T> {
private Node first;
private Node last;
private int size;
public boolean add(T obj) {
Node newNode = new Node();
if(size == 0) {
newNode.previous = null;
newNode.obj = obj;
newNode.next = null;
first = newNode;
last = newNode;
} else {
newNode.previous = last;
newNode.obj = obj;
newNode.next = null;
last.next = newNode;
last = newNode;
}
size++;
return true;
}
public boolean add(int index, T obj) {
if(index < 0 || index > size) {
throw new RuntimeException("索引不合法");
} else if(index == 0 && size == 0) {
add(obj);
} else if(index == 0) {
Node newNode = new Node();
newNode.next = first;
newNode.obj = obj;
newNode.previous = null;
first = newNode;
size++;
} else if(index == size){
add(obj);
} else {
Node newNode = new Node();
newNode.obj = obj;
Node node = first;
for(int i=0; i<index; i++) {
node = node.next;
}
Node left = node.previous;
left.next = newNode;
newNode.previous = left;
newNode.next = node;
node.previous = newNode;
size++;
}
return true;
}
public boolean remove(int index) {
if(index < 0 || index >= size) {
throw new RuntimeException("索引不合法");
} else if(index == 0) {
first = first.next;
first.previous = null;
} else if(index == (size - 1)) {
last = last.previous;
last.next = null;
} else {
Node node = first;
for(int i=0; i<index; i++) {
node = node.next;
}
Node left = node.previous;
Node right = node.next;
left.next = right;
right.previous = left;
}
size--;
return true;
}
public boolean remove(T obj) {
int index = indexOf(obj);
if(index == -1) {
return false;
} else {
remove(index);
}
return true;
}
public T get(int index) {
if(index < 0 || index >= size) {
throw new RuntimeException("越界");
}
Node node = first;
for(int i=0; i<index; i++) {
node = node.next;
}
return (T) node.obj;
}
public int indexOf(T obj) {
int index = -1;
Node node = first;
for(int i=0; i<size; i++) {
if(node.obj.equals(obj)) {
index = i;
break;
} else {
node = node.next;
}
}
return index;
}
public int size() {
return size;
}
public void clear() {
first = null;
last = null;
}
public boolean contains(T obj) {
if(size == 0) {
return false;
}
int index = -1;
Node node = first;
for(int i=0; i<size; i++) {
if(node.obj.equals(obj)) {
index = i;
break;
}
}
if(index == -1) {
return false;
} else {
return true;
}
}
private class Node {
public Node previous;
public Object obj;
public Node next;
}
}