public class LianShiBiaoShi<E> {
//这是一个内部类
private class Node<E> {
public E data;
public Node<E> next;
}
private Node firstnode = new Node();//做为表头,指向头节点
private int length = 0;
// 判断是否为空
public boolean listEmpty() {
return firstnode.next == null;
}
// 求表中的个数
public int length() {
return length;
}
// 返回第i个元素
public E getElem(int k) {
Node<E> temp = firstnode;
for (int i = 0; i <= k; i++) {
temp = temp.next;
}
return temp.data;
}
// 返回第一个elem的位子 如果不存在返回-1
public int locateElem(E elem) {
Node<E> temp = firstnode;
int cur = -1;
while (temp != null) {
E dt = temp.data;
if (elem.equals(dt)) {
return cur;
} else {
temp = temp.next;
cur++;
}
}
return -1;
}
// 返回前驱元素
public E priorElem(E elem) {
Node<E> temp = firstnode.next;
Node<E> pre = firstnode;
while (temp != null) {
E dt = temp.data;
if (elem.equals(dt)) {
return pre.data;
} else {
temp = temp.next;
pre = pre.next;
}
}
return null;
}
// 返回后继元素
public E nextElem(E elem) {
Node<E> temp = firstnode.next;
while (temp.next != null) {
if (elem.equals(temp.data)) {
temp = temp.next;
return temp.data;
} else {
temp = temp.next;
}
}
return null;
}
// 插入元素,在顺序连表最后插入
public void insertElem(E elem) {
Node<E> temp = firstnode;
Node<E> n = new Node<E>();
n.data = elem;
if (firstnode.next == null) {
firstnode.next = n;
} else {
while (temp.next != null) {
temp = temp.next;
}
temp.next = n;
}
length++;
}
// 在第i个元素之前插入元素
public void insertElem(int k, E elem) {
if (k >= length) {
throw new RuntimeException("你插入的元素超出范围!");
}
Node<E> temp = firstnode;
Node<E> n = new Node<E>();
n.data = elem;
for (int i = 0; i < k; i++) {
temp = temp.next;
}
n.next = temp.next;
temp.next = n;
length++;
}
// 删除第k个元素
public E deleteElem(int k) {
Node<E> temp = firstnode.next;
Node<E> pre = firstnode;
for (int i = 0; i < k; i++) {
temp = temp.next;
pre = pre.next;
}
pre.next = temp.next;
return temp.data;
}
public String toString() {
Node<E> temp = firstnode.next;
String s = "[";
while (temp.next != null) {
s = s + temp.data + ",";
temp = temp.next;
}
return s + temp.data + "]";
}
}
//这是一个内部类
private class Node<E> {
public E data;
public Node<E> next;
}
private Node firstnode = new Node();//做为表头,指向头节点
private int length = 0;
// 判断是否为空
public boolean listEmpty() {
return firstnode.next == null;
}
// 求表中的个数
public int length() {
return length;
}
// 返回第i个元素
public E getElem(int k) {
Node<E> temp = firstnode;
for (int i = 0; i <= k; i++) {
temp = temp.next;
}
return temp.data;
}
// 返回第一个elem的位子 如果不存在返回-1
public int locateElem(E elem) {
Node<E> temp = firstnode;
int cur = -1;
while (temp != null) {
E dt = temp.data;
if (elem.equals(dt)) {
return cur;
} else {
temp = temp.next;
cur++;
}
}
return -1;
}
// 返回前驱元素
public E priorElem(E elem) {
Node<E> temp = firstnode.next;
Node<E> pre = firstnode;
while (temp != null) {
E dt = temp.data;
if (elem.equals(dt)) {
return pre.data;
} else {
temp = temp.next;
pre = pre.next;
}
}
return null;
}
// 返回后继元素
public E nextElem(E elem) {
Node<E> temp = firstnode.next;
while (temp.next != null) {
if (elem.equals(temp.data)) {
temp = temp.next;
return temp.data;
} else {
temp = temp.next;
}
}
return null;
}
// 插入元素,在顺序连表最后插入
public void insertElem(E elem) {
Node<E> temp = firstnode;
Node<E> n = new Node<E>();
n.data = elem;
if (firstnode.next == null) {
firstnode.next = n;
} else {
while (temp.next != null) {
temp = temp.next;
}
temp.next = n;
}
length++;
}
// 在第i个元素之前插入元素
public void insertElem(int k, E elem) {
if (k >= length) {
throw new RuntimeException("你插入的元素超出范围!");
}
Node<E> temp = firstnode;
Node<E> n = new Node<E>();
n.data = elem;
for (int i = 0; i < k; i++) {
temp = temp.next;
}
n.next = temp.next;
temp.next = n;
length++;
}
// 删除第k个元素
public E deleteElem(int k) {
Node<E> temp = firstnode.next;
Node<E> pre = firstnode;
for (int i = 0; i < k; i++) {
temp = temp.next;
pre = pre.next;
}
pre.next = temp.next;
return temp.data;
}
public String toString() {
Node<E> temp = firstnode.next;
String s = "[";
while (temp.next != null) {
s = s + temp.data + ",";
temp = temp.next;
}
return s + temp.data + "]";
}
}