数据结构——java实现链表
public class MyLinked<T> {
private class Node<T> {
T element;
Node next;
public Node(T element) {
this.element = element;
this.next = next;
}
public Node() {
this(null);
}
public Node(T element, Node next) {
this.element = element;
this.next = next;
}
@Override
public String toString() {
return this.element.toString();
}
}
private int size;
private Node dummyNode;
public MyLinked() {
this.size = 0;
this.dummyNode = new Node(null, null);
}
public int getSize() {
return size;
}
public boolean isEmpty() {
return size == 0;
}
public void addHead(T element) throws IllegalAccessException {
addIndex(element,0);
}
public void addIndex(T element,int index) throws IllegalAccessException {
Node node = new Node(element);
if (node == null){
throw new IllegalAccessException("node is null!!!");
}
if (index < 0 || index > size) {
throw new IllegalAccessException("Index is error!!!");
}
Node prev = dummyNode;
for (int i = 0; i < index; i++) {
prev = prev.next;
}
node.next = prev.next;
prev.next = node;
size++;
}
public void addLast(T element) throws IllegalAccessException {
addIndex(element,size);
}
public T getHead() {
return dummyNode == null ? null : (T) dummyNode.next.element;
}
public T getIndex(int index) throws IllegalAccessException {
if (index < 0 || index >= size) {
throw new IllegalAccessException("index is error!!!");
}
Node prev = dummyNode.next;
for (int i = 0; i < index; i++) {
prev = prev.next;
}
return prev == null ? null : (T)prev.element;
}
public T getLast() throws IllegalAccessException {
return getIndex(size-1);
}
public boolean contains(T element) {
boolean flag = false;
Node prev = dummyNode.next;
while (prev != null) {
if (prev.element.equals(element)) {
return true;
}
prev = prev.next;
}
return flag;
}
public T setIndex(int index,T element) throws IllegalAccessException {
if (index < 0 || index >= size) {
throw new IllegalAccessException("index is error");
}
Node prev = dummyNode.next;
for (int i = 0; i < index; i++) {
prev = prev.next;
}
T ele = (T)prev.element;
prev.element = element;
return ele;
}
public T remove(int index) throws IllegalAccessException {
if (index < 0 || index >= size) {
throw new IllegalAccessException("index is error");
}
Node prev = dummyNode;
for (int i = 0; i < index; i++) {
prev = prev.next;
}
T ele = (T) prev.next.element;
prev.next = prev.next.next;
size--;
return ele;
}
@Override
public String toString() {
StringBuffer sb = new StringBuffer();
Node prev = dummyNode.next;
while (prev != null) {
sb.append(prev.element+"-->");
prev = prev.next;
}
sb.append("null");
return sb.toString();
}
}