package 美颜相机.lianbiao; public class Node { Object value; Node next; public Node(Object value, Node next) { this.value = value; this.next = next; } public static void main(String[] args) { // 创建节点 Node node1 = new Node("医生", null); Node node2 = new Node("预言家", null); Node node3 = new Node("狼人", null); Node node4 = new Node("巫师", null); Node node5 = new Node("平民", null); Node node6 = new Node("猎人", null); Node node7 = new Node("射手", null); // 连接节点 node1.next = node2; node2.next = node3; node3.next = node4; node4.next = node5; node5.next = node6; node6.next = node7; // 链表连成的结构 System.out.println(node1.value); System.out.println(node1.next.value); System.out.println(node1.next.next.value); System.out.println(node1.next.next.next.value); System.out.println(node1.next.next.next.next.value); System.out.println(node1.next.next.next.next.next.value); System.out.println(node1.next.next.next.next.next.next.value); // 打印链表 Node temp = node1; while (temp != null) { System.out.print(temp.value + ","); temp = temp.next;// 将下一个节点取出来 继续循环判断 } System.out.println(); // 查找节点 - 查找平民的前一个 与 后一个是谁 String name = "平民"; Node temp1 = node1; while (temp1 != null) { if (temp1.value.equals(name)) { System.out.println("查找到了平民"); break; } temp1 = temp1.next;// 将下一个节点取出来 继续循环判断 } System.out.println(temp1.value); // 删除节点 // 删除最后一个 Node temp2 = node1; while (temp2 != null) { if (temp2.next.next == null) {// 证明temp2是倒数第二个节点 temp2.next = null; System.out.println("已经删除最后一个"); } temp2 = temp2.next; } // 打印链表 temp = node1; while (temp != null) { System.out.print(temp.value + ","); temp = temp.next;// 将下一个节点取出来 继续循环判断 } System.out.println(); // 0:查找平民的前一个 与 后一个是谁 String name1 = "平民"; Node temp3 = node1; while (temp3 != null) { if (temp3.next.value.equals(name1)) { System.out.println("查找到平民上一个节点为:" + temp3.value); } if (temp3.value.equals(name1)) { System.out.println("查找到平民下一个节点为:" + temp3.next.value); break; } temp3 = temp3.next; } // 1:删除第三个 int number = 0; Node temp4 = node1; while (temp4 != null) { number += 1; if (number == 3) { temp4 = temp4.next; } System.out.print(temp4.value + ","); temp4 = temp4.next; } System.out.println(); // 2:删除第一个 node1删除 node2 变成头节点 Node first = node1; int Number = 1; Node temp5 = first; System.out.println("头节点为:" + first.value); while (temp5 != null) { System.out.print(temp5.value + ","); Number += 1; temp5 = temp5.next; if (Number == 2) { first = temp5; } } System.out.println("更改后头节点为:" + first.value); // 3:连续删除两个 预言家,狼人 Node temp6 = node1; String name2 = "预言家"; while (temp6 != null) { temp6 = temp6.next; System.out.print(temp6.value + ","); if (temp6.value.equals(name2)) { temp6 = temp6.next.next.next; System.out.println("已删除预言家,狼人"); break; } } // 4:间隔删除两个 预言家 巫师 Node temp7 = node1; while (temp7 != null) { temp7 = temp7.next; System.out.print(temp6.value + ","); if (temp7.value.equals("预言家")) { temp7 = temp7.next.next; temp7 = temp7.next.next; System.out.println("已删除预言家,巫师"); break; } } // 5:交换位置 // 6:狼人和猎手交换位置 Node temp8 = node1; String NAME1 = "狼人"; String NAME2 = "猎手"; String Tname = null; while (temp8 != null) { temp8 = temp8.next; if (temp8.value == NAME1) { Tname = NAME1; temp8.value = NAME2; } if (temp8.value == NAME2) { temp8.value = Tname; break; } } // 7: 链表反转 Node temp9=node1; Node retemp=null; Node value1=null; while (temp9!=null){ value1=temp9; value1.next=retemp; retemp=value1; temp9=temp9.next; System.out.println(value1.value); } while (value1!= null) { System.out.print(value1.value + ","); value1 = value1.next; } } }
链表的应用
最新推荐文章于 2024-10-15 15:06:01 发布