单链表基本操作

package java_test3;
public class LinkList<T> implements List<T> {
LinkNode<T> head = new LinkNode<T>();
public void createList(T[] a) {
LinkNode<T> s;
for (int i = 0; i < a.length; i++) {
s = new LinkNode<T>(a[a.length - 1 - i]);
s.next = head.next;
head.next = s;
}
}
@SuppressWarnings("unchecked")
public int getSize() {
LinkNode<T> temp = head.next;
int count = 0;
while (true) {
if (temp == null) {
break;
}
count++;
temp = temp.next;
}
return count;
}
public void setSize(int nlen) {
int len = getSize();
if (nlen < 0 || nlen > len) {
throw new RuntimeException("设置长度不在有效范围内");
}
if (nlen == len) {
return;
}
LinkNode<T> p = geti(nlen - 1);
p.next = null;
}
public T getElem(int i) {
int len = getSize();
if (i < 0 || i > len - 1) {
throw new RuntimeException("你查的不在有效范围内");
}
LinkNode<T> p = geti(i);
return (T) p.t;
}
@SuppressWarnings("unchecked")
private LinkNode<T> geti(int i) {
LinkNode<T> temp = head.next;
int x = 1;
while (true) {
x++;
if (x == i || temp == null) {
break;
}
temp = temp.next;
}
return temp;
}
public void setElem(int i, T e) {
if (i < 0 || i > getSize() - 1) {
throw new RuntimeException("不在有效范围内!");
}
LinkNode<T> p = geti(i);
p.t = e;
}
@SuppressWarnings("unchecked")
public int getNo(T e) {
int j = 0;
LinkNode<T> p = head.next;
while (p != null && !p.equals(e)) {
j++;
p = p.next;
}
if (p == null) {
return -1;
} else {
return j;
}
}
@SuppressWarnings("unchecked")
public void add(T e) {
LinkNode<T> temp = head.next;
while (temp.next != null) {
temp = temp.next;
}
temp.next = new LinkNode<T>(e);
}
@SuppressWarnings("unchecked")
public void insert(int i, T e) {
if (i < 0 || i > getSize()) {
throw new RuntimeException("你插入的" + i + "不在有效范围内!");
}
LinkNode<T> s = new LinkNode<T>(e);
LinkNode<T> temp = head;
for (int a = 0; a < i; a++) {
temp = temp.next;
}
if (temp.next != null) {
s.next = temp.next;
temp.next = s;
} else {
temp.next = s;
}
}
@SuppressWarnings("unchecked")
public String toString() {
String ans = "";
LinkNode<T> p = head.next;
while (p != null) {
ans += p.t + " ";
p = p.next;
}
return ans;
}
@SuppressWarnings("unchecked")
public void delete(int i) {
if (i < 0 || i > getSize() - 1) {
throw new RuntimeException("删除的不在有效范围内!");
}
LinkNode<T> temp = head;
for (int j = 0; j < i; j++) {
temp = temp.next;
}
if (temp.next.next == null) {
temp.next = null;
} else {
temp.next = temp.next.next;
}
}
}