线性表的链式实现

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 + "]";
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值