import javax.print.attribute.Size2DSyntax;
import javax.xml.transform.Templates;
import javax.xml.ws.AsyncHandler;
public class LinkedList<E> {
private Node last;
private Node first;
private int size;
public void add(E element) {
Node node = new Node(element);
if(first == null) {
last = node;
first = node;
}else {
node.previuos = last;
node.next = null;
last.next = node;
last = node;
}
size ++;
}
private void checkRange(int index) {
if (index < 0 || index > size - 1) {
throw new RuntimeException("索引值超过链表长度");
}
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder("[");
Node temp = first;
while(temp != null) {
sb.append(temp.element + ",");
temp = temp.next;
}
sb.setCharAt(sb.length() -1, ']');
return sb.toString();
}
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 = first;
for (int i = 0; i < index; i++) {
temp = temp.next;
}
return temp;
}
public void remove(int index) {/*删除方法*/
checkRange(index);
Node node = getNode(index);
if(node !=null) {
Node previuosNode = node.previuos;
Node nexNode = node.next;
if(previuosNode != null) {
previuosNode.next = nexNode;
}
if(nexNode != null) {
nexNode.previuos = previuosNode;
}
if (index ==0) {
first = nexNode;
}
else if (index == size - 1) {
last = previuosNode;
}
size --;
}
}
public void insert(int index,E element) {
checkRange(index);
Node newNode = new Node(element);
Node node = getNode(index);
if (node != null) {
Node preNode = node.previuos;
Node nexNode = node.next;
if (preNode != null && nexNode != null) {
node.previuos = newNode;
preNode.next = newNode;
newNode.previuos = preNode;
newNode.next = node;
}else {
if (index == 0) {
first = newNode;
node.previuos = newNode;
newNode.previuos = null;
newNode.next = node;
}else if (index == size - 1) {
last = newNode;
node.next = newNode;
newNode.previuos = node;
newNode.next = null;
}
}
size ++;
}
}
public static void main(String[] args) {
LinkedList<String> l1 = new LinkedList();
l1.add("a");
l1.add("b");
l1.add("333");
l1.add(1111);
l1.insert(l1.size - 1, "1321");
System.out.println(l1);
}
}