自己动手用Java写链表

常见的底层代码,很多一目了然的东西,看着很简单,但是当我们动手写的时候就会出现问题,比如常见的linklist,还真不是一件容易的事,比如结点之间的指向,下面写了几个

  • 从头添加
  • 从尾添加
  • 从指定位置添加
  • 链表反转
public class MyLinkList<T> {
private Node<T> head;

public MyLinkList() {
head = new Node<>(null);
}

public void addFirst(T t){
Node<T> node = new Node<T>(t);
node.next = head.next;
head.next = node;
}

public void addLast(T t){
Node<T> node = new Node<T>(t);
Node<T> tmpNode = head;
while(tmpNode.next != null){
tmpNode = tmpNode.next;
}
tmpNode.next = node;
}

public void add(T t, int i){
int idx = 0;
Node<T> tmpNode = head;
while(idx++ != i){
tmpNode = tmpNode.next;
}
Node<T> node = new Node<T>(t);
node.next = tmpNode.next;
tmpNode.next = node;
}

public void reverse(T){
// 空表表示返回
if (head.next == null){
return;
}
Node<T> preNode= head.next;
Node<T> nextNode= head.next.next;

//将第一个结点与第二个结点断掉,避免形成环
head.next.next = null;
while (nextNode != null){
Node<T> tmpNextNode = nextNode.next;
nextNode.next = preNode;
preNode = nextNode;
nextNode = tmpNextNode;
}
head.next = preNode;
}
}