class DoubleLinkedList {
StudentNode head = new StudentNode(0, "");
//1.将新添加的元素直接插入到链表的最后
// public void add(StudentNode newStudentNode) {
// StudentNode temp = head;
// while (true) {
// if (temp.next == null) {
// break;
// }
// temp = temp.next;
// }
// temp.next = newStudentNode;
// newStudentNode.pre = temp;
// }
//2.将新添加的元素按照编号插入链表
public void addByOrder(StudentNode newStudentNode) {
StudentNode temp = head;
boolean flag = false;
while (true) {
if (temp.getNo() == newStudentNode.getNo()) {
break;
}
if (temp.next == null) {
flag = true;
break;
}
if (temp.next.getNo() > newStudentNode.getNo()) {
flag = true;
break;
}
temp = temp.next;
}
if (flag) {
if (temp.next == null) {
temp.next = newStudentNode;
newStudentNode.pre = temp;
} else {
//注意!
newStudentNode.pre = temp;
newStudentNode.next = temp.next;
temp.next = newStudentNode;
temp.next.pre = newStudentNode;
}
} else {
System.out.printf("该编号%d已经存在,无法向链表添加该元素!\n", temp.getNo());
}
}
//3.删除链表元素
public void delete(StudentNode studentNode) {
StudentNode temp = head;
boolean flag = false;
while (true) {
if (temp.getNo() == studentNode.getNo()) {
flag = true;
break;
}
if (temp.next == null) {
break;
}
temp = temp.next;
}
if (flag) {
temp.pre.next = temp.next;
//如果不判空的话,可能会出现空指针异常
if (temp.next != null) {
temp.next.pre = temp.pre;
}
} else {
System.out.println("该链表不存在该元素!无法删除该元素!");
}
}
//4.修改链表元素
public void update(StudentNode studentNode) {
StudentNode temp = head;
boolean flag = false;
while (true) {
if (temp.getNo() == studentNode.getNo()) {
flag = true;
break;
}
if (temp.next == null) {
break;
}
temp = temp.next;
}
if (flag) {
temp.setName(studentNode.getName());
} else {
System.out.println("该链表不存在该元素!无法修改该元素!");
}
}
//5.遍历链表(从头到尾遍历)
public void showLinkedList1() {
StudentNode temp = head;
if (head.next == null) {
System.out.println("链表为空!");
return;
}
while (true) {
if (temp.next == null) {
break;
} else {
System.out.println(temp.next);
}
temp = temp.next;
}
}
//6.遍历链表(从尾到头遍历)
public void showLinkedList2() {
StudentNode temp = head;
if (temp.next == null) {
System.out.println("链表为空!");
return;
}
while (true) {
if (temp.next == null) {
break;
}
temp = temp.next;
}
while (true) {
if (temp.pre != null) {
System.out.println(temp);
}
if (temp.pre == null) {
break;
}
temp = temp.pre;
}
}
}
class StudentNode {
private int no;
private String name;
StudentNode next;
StudentNode pre;
public StudentNode(int no, String name) {
this.no = no;
this.name = name;
}
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "StudentNode{" +
"no=" + no +
", name='" + name + '\'' +
'}';
}
}
Java实现双向链表增删改查
于 2023-12-10 00:20:13 首次发布