比上一個版本新增了add(int index, E element)方法,使用了泛型
/**
* 新增泛型
* remove方法
* add方法(Obgect object)
* get方法
* getNode(int index)方法
* 新增往指定位置插入方法add(int index,E element)
* @author HQ
* @e-mail [email protected]
* @date 2018/11/2.
*/
public class LinkedList03<E> {
private Node first;
private Node last;
private int size;
public void remove(int index) {
Node temp = getNode(index);
if (temp != null) {
Node up = temp.previous;
Node down = temp.next;
if (up != null) {
up.next = down;
}
if (down != null) {
down.previous = up;
}
//被刪除的元素是第一個元素時
if(index==0){
first=down;
}
//被刪除的元素是最後一個元素時
if(index==size-1){
last=up;
}
size--;
}
}
public void add(int index,E element){
checkRange(index);
Node newNode=new Node(element);
Node temp=getNode(index);
if(temp!=null){
Node up=temp.previous;
up.next=newNode;
newNode.previous=up;
newNode.next=temp;
temp.previous=newNode;
}
size++;
}
// [ ]
//["a","b"]
public void add(E object) {
Node node = new Node(object);
if (first == null) {
node.previous = null;
node.next = null;
first = node;
last = node;
} else {
node.previous = last;
node.next = null;
last.next = node;
last = node;
}
size++;
}
@Override
public String toString() {
StringBuilder stringBuilder = new StringBuilder("[");
Node temp = first;
while (temp != null) {
stringBuilder.append(temp.element + ",");
temp = temp.next;
}
stringBuilder.setCharAt(stringBuilder.length() - 1, ']');
return stringBuilder.toString();
}
public void checkRange(int index){
if (index < 0 || index > size - 1) {
throw new RuntimeException("索引位置不合法" + index);
}
}
public E get(int index) {
checkRange(index);
Node temp = getNode(index);
return temp != null ? (E)temp.element : null;
}
private Node getNode(int index) {
checkRange(index);
Node temp = null;
//size>>1 相當於除以2
if (index < (size >> 1)) {
temp = first;
for (int i = 0; i < index; i++) {
temp = temp.next;
}
} else {
temp = last;
for (int i = size - 1; i > index; i--) {
temp = temp.previous;
}
}
return temp;
}
public static void main(String[] args) {
LinkedList03<String> list01 = new LinkedList03();
list01.add("a");
list01.add("b");
list01.add("c");
list01.add("d");
list01.add("e");
list01.add("f");
list01.add(3,"黃強");
System.out.println(list01);
System.out.println(list01.get(3));
}
}