今天学习了单链表的增删查改,把保存到博客里—_—
public class LinkList { // 该类用于实现链表的增删查改
public Node head = null;
// 定义链表头部 public void initialize() {// 该方法用于初始化链表
head = new Node();
// 头部下标是-1
} public int length() {// 返回链表的长度
int length = 0;
Node temp = head;
while (temp.next != null) {
length++;
temp = temp.next;
}
return length;
} public void addNode(Node node) {// 在链表尾部添加节点
Node temp = head;
while (temp.next != null) {
temp = temp.next;
}
temp.next = node;
} public void insertNode(int index, Node node) {// 在指定位置上插入节点
if (!(index >= 0 & index <= length())) {
System.out.println("插入的位置不存在");
} else {
int length = 0;
Node temp = head;
while (temp.next != null) {
if (index == length) {
node.next = temp.next;
temp.next = node;
return;
}
length++;
temp = temp.next;
}
temp.next = node;
}
} public void indexDeleteNode(int index) {// 删除指定位置上的节点
if (!(index >= 0 & index < length())) {
System.out.println("删除的下标位置不存在");
} else {
int length = 0;
Node temp = head;
while (temp.next != null) {
if (index == length) {
temp.next = temp.next.next;
return;
}
length++;
temp = temp.next;
}
}
} public void valueDeleteNode(Object o) {// 删除值为o的节点
Node temp = head;
while (temp.next != null) {
if (temp.next.value.equals(o)) {
temp.next = temp.next.next;
return;
}
temp = temp.next;
}
System.out.println("链表中没有值为" + o + "的节点");
} public int valueSeek(Object o) {// 查找o在链表中的下标,没有返回-1
int index = 0;
Node temp = head;
while (temp.next != null) {
if (temp.next.value.equals(o)) {
return index;
}
index++;
temp = temp.next;
}
return -1;
} public void printNode(Node header) {// 该方法用于输出链表
System.out.print("链表");
Node temp = header;
while (temp.next != null) {
System.out.print("\t" + temp.next.value);
temp = temp.next;
}
System.out.println();
} public void changeValue(int index, Object value) {// 更改指定下标的值
if (!(index >= 0 & index < length())) {
System.out.println("更改的下标位置不存在");
} else {
int length = 0;
Node temp = head;
while (temp.next != null) {
if (index == length) {
temp.next.value = https://www.it610.com/article/value;
return;
}
length++;
temp = temp.next;
}
}
}
}class Node {// 定义链表的实体类
public Object value = null;
public Node next = null;
public Node(Object value) {
this.value = value;
} public Node() {
}
链表的测试类,使用前要先初始化—_—
public class LinkListMain {
public static void main(String[] args) {
LinkList linkList = new LinkList();
linkList.initialize();
// 初始化链表
linkList.addNode(new Node(2));
// 向链表尾部添加节点
linkList.addNode(new Node(3));
linkList.addNode(new Node(4));
linkList.addNode(new Node(5));
linkList.addNode(new Node(6));
linkList.addNode(new Node(7));
linkList.printNode(linkList.head);
// 输出链表内容
System.out.println("链表长度" + linkList.length());
// 输出链表长度
linkList.indexDeleteNode(2);
// 删除下标为2的节点(下标从0开始)
linkList.valueDeleteNode(6);
// 删除值为6的节点
System.out.println("删除后");
linkList.printNode(linkList.head);
// 输出链表内容
System.out.println("链表长度" + linkList.length());
// 输出链表长度
linkList.insertNode(3, new Node(10));
// 在3下标上添加一个值为10的节点
System.out.println("添加后");
linkList.printNode(linkList.head);
// 输出链表内容
System.out.println("链表长度" + linkList.length());
// 输出链表长度
System.out.println("查找链表有没有值为" + 5 + "的节点并返回下标\t" + linkList.valueSeek(5));
System.out.println("查找链表有没有值为" + 11 + "的节点并返回下标\t" + linkList.valueSeek(11));
linkList.changeValue(2, 12);
// 将下标为2的节点的值更改为12
System.out.println("更改后");
linkList.printNode(linkList.head);
// 输出链表内容
}
}
【单链表的增删查改】运行结果—_—
链表 2 3 4 5 6 7
链表长度6
删除后
链表 2 3 5 7
链表长度4
添加后
链表 2 3 5 10 7
链表长度5
查找链表有没有值为5的节点并返回下标 2
查找链表有没有值为11的节点并返回下标 -1
更改后
链表 2 3 12 10 7
么得啦~~~~