创建一个节点类
public class Node {
Node priveous;
Node next;
Object elementData;
Node(Object object){
this.elementData=object;
}
Node(){
}
}
一个linklist类
实现插入,删除,遍历,查找等方法
public class MyLinkList<E> {
Node first;
Node last;
private int length;
public boolean isEmpty() {
if (length==0) {
return true;
}
else {
return false;
}
}
public void add(E e) {
Node newNode=new Node(e);
if (isEmpty()) {//如果列表为空,头节点和尾结点都指向第一个节点
first=newNode;
last= newNode;
}
else {
newNode.priveous=last;//新节点指向上一个节点
newNode.next=null;//新节点下一个节点为空
last.next=newNode;//第一个节点的下一个节点指向新节点
last=newNode;//last指向新节点
}
length++;
}
private Node getNode(int index) {
Node tempNode;
tempNode=null;
if (index<(length>>1)) {
tempNode = first;
for (int i = 0; i <length; i++) {
if (index == i) {
return tempNode;
} else {
if (tempNode.next!=null) {
tempNode = tempNode.next;
}
else {
break;
}
}
}
}
else {
tempNode=last;
for (int i = length-1; i>=0; i--) {
if (index == i) {
return tempNode;
} else {
if (tempNode.priveous!=null) {
tempNode = tempNode.priveous;
}
else {
break;
}
}
}
}
return tempNode;
}
private Node getNode(E e) {
Node tempNode;
tempNode=first;
while (tempNode.next!=null) {
if (tempNode.elementData.equals(e)) {
return tempNode;
}
tempNode=tempNode.next;
}
return tempNode;
}
@SuppressWarnings("unchecked")
public E get(int index) {
try {
return (E) getNode(index).elementData;
} catch (Exception e) {
// TODO: handle exception
}
return null;
}
public void remove(E e) {//删除左起发现的第一个元素
Node tempNode=getNode(e);
if (tempNode==first) {
first=tempNode.next;
tempNode.priveous=null;
}
else if (tempNode==last) {
last=tempNode.priveous;
tempNode.next=null;
}
else {
Node preNode=tempNode.priveous;//保存要删除节点的上一个节点
Node nextNode=tempNode.next;//保存要删除节点的下一个节点
preNode.next=nextNode;//让被删除的节点的上一个节点指向删除节点的下一个节点
nextNode.priveous=preNode;//把被删除节点的下一个节点指向删除节点的上一个节点
}
length--;
}
public void removeAll() {
first=null;
last=null;
length=0;
}
@SuppressWarnings("unchecked")
public void remove(int index) {//删除指定下标的元素
Node tempNode =getNode(index);
remove((E)tempNode.elementData);
}
public void insert(int index,E e) {
Node oldNode=getNode(index);
Node newNode = new Node();
if (index==0) {
newNode.next=oldNode;
oldNode.priveous=newNode;
first=newNode;
}
else if (index==length-1) {
last.next=newNode;
newNode.priveous=last;
newNode.next=null;
last=newNode;
}
else {
Node preNode=oldNode.priveous;
newNode.priveous=preNode;
newNode.next=oldNode;
preNode.next=newNode;
oldNode.priveous=newNode;
}
newNode.elementData=e;
length++;
}
@Override
public String toString() {
StringBuilder b = new StringBuilder();
if (length == 0) {
b.append("null");
return b.toString();
}
b.append("[");
for (int i = 0; i < length; i++) {
b.append(get(i) + ",");
}
b.setCharAt(b.length() - 1, ']');
return b.toString();
}
因篇幅问题不能全部显示,请点此查看更多更全内容