先创建一个节点类
//创建一个节点类
public class Node {
Node next = null;//设置下一个节点为null
Object date; //数据
public Node(Object date) {
this.date = date;
}
}
单向链表类
public class OnewayList {
private Node head;//单向列表表头节点
//单向列表插入数据
public void insert(Object data) {
//表头没数据,则数据插入到第一个位置
if (head == null) {
head = new Node(data);
} else {
Node tmp = head;
int i = 1;
//判断链表下一个数据是否存在
while (tmp.next != null) {
//数据存在则继续判断下一个,知道链表末尾
tmp = tmp.next;
i++;
}
//将数据插入到链表末尾的下一个
tmp.next = new Node(data);
}
}
//在指定位置插入数据
public void insert(Object data, int index) throws Exception {
if (index > length() - 1) {
throw new Exception("超过链表长度");
}
if (index == 0) {
Node node = new Node(data);
node.next = head;
head = node;
return;
}
int i = 1;
Node left = head;
Node tmp = head.next;
while (i <= index) {
if (i == index) {
Node node = new Node(data);
node.next = tmp;
left.next = node;
} else {
left = left.next;
tmp = tmp.next;
}
i++;
}
}
//根据下标删除数据
public void delete(int i) throws Exception {
if (head == null) {
throw new Exception("链表为空,无法删除");
}
if (i == 0) {
head = head.next;
return;
}
Node left = head;
Node tmp = head.next;
int index = 1;
while (i >= index && tmp != null) {
if (i == index) {
left.next = tmp.next;
} else {
tmp = tmp.next;
left = left.next;
}
index++;
}
}
//指定区间删除数据
public void delete(int start, int end) throws Exception {
if (head == null) {
throw new Exception("链表为空,无法删除");
}
if (start >= end || start < 0) {
throw new Exception("数据错误");
}
if (start > length() - 1 || end > length() - 1) {
throw new Exception("超过链表长度");
}
if (start == 0) {
while (end > 0) {
head = head.next;
end--;
}
}
Node left = head;
Node right = head.next;
int index = 1;
while (index <= start || index <= end) {
if (index < start) {
left = left.next;
}
right = right.next;
if (end == index) {
left.next = right;
}
index++;
}
}
//返回链表长度
public int length() {
if (head == null) {
return 0;
}
int i = 1;
Node tmp = head;
while (tmp.next != null) {
i++;
tmp = tmp.next;
}
return i;
}
//打印链表数据
public String prin() {
StringBuilder a = new StringBuilder();
if (head == null) {
return "";
}
Node tmp = head;
while (tmp != null) {
a.append(tmp.date);
tmp = tmp.next;
}
System.out.println(a.toString());
return a.toString();
}
}