企业网站推广的实验内容,中华建设杂志社网站,小精灵网站在线做语文,短视频网站开发一、什么是链表 链表由一系列节点组成#xff0c;每个节点都包含一个 data 域#xff08;存放数据#xff09;和一个 next 域#xff08;指向下一节点#xff09;。链表中的节点可以按照任意顺序存放在内存中#xff0c;它们之间并不连续。每个节点都记录了下一个节点的地…一、什么是链表 链表由一系列节点组成每个节点都包含一个 data 域存放数据和一个 next 域指向下一节点。链表中的节点可以按照任意顺序存放在内存中它们之间并不连续。每个节点都记录了下一个节点的地址这样可以通过遍历节点的方式遍历整个链表。链表有多种类型如单向链表、双向链表和循环链表等。 这里主要了解单向列表的实现与使用。 二、在 Java 中实现链表 首先我们需要定义一个节点类假设其用于保存个人信息id、name其中 next 用于指向下一个节点Node。其还有构造方法同时重写了 toString 方法不输出 next 的信息。
class Node {public int id;public String name;public Node next;//构造器public Node(int id, String name) {this.id id;this.name name;}Overridepublic String toString() {return Node{ id id , name name };}
} 接着我们初始化一个头结点其不存储任何数据仅用于表示单链表的头部。
private Node head new Node(0, ); 想要向链表中添加节点可以在 SingleLinkedList 类中定义一个 add 方法其内通过辅助节点(next)遍历链表到尾部再将要添加的节点添加到尾部。
public void add(Node node) {// 因为 head 节点不能动所以需要一个辅助节点 tempNode temp head;while (true){if (temp.next null){break;}temp temp.next;}temp.next node;
} 想要查看链表的所有数据可以定义一个 list 方法创建一个辅助节点遍历链表并在 next 为空时输出错误信息后停止遍历不为空时输出节点的内容。
public void list(){if (head.next null) {System.out.println(链表为空);return;}Node temp head.next;while(true){if (temp null){break;}System.out.println(temp);temp temp.next;}
}
最终效果如下所示 而要是想要实现添加时的 id 顺序随机 但会在链表中排序后添加到对应位置的功能我们可以创建一个排序添加的方法 addByOrder通过比较加入的节点与链表中原有节点中的 id 的大小来添加到链表的相应位置。
public void addByOrder(Node node){Node temp head;boolean flag false;while(true){if (temp.next null){break;}if (temp.next.id node.id){break;} else if (temp.next.id node.id){flag true;break;}temp temp.next;}if (flag){System.out.println(准备插入的人的编号已经存在: node.id);} else {node.next temp.next;temp.next node;}
} 方法中先声明了一个辅助节点 temp 和一个用于记录 id 是否已存在的 flag。其先遍历链表如果 temp 的下一个节点为 null 则表示到达链表的尾部直接退出循环之后判断是否存在 id 在新加入的节点的 id 之后的如果有则退出循环此时 temp 代表需要插入位置之前的节点处而 temp.next 则代表需要插入位置之后的节点处。如下图所示 而循环外可以将 ① node 的 next 设为 temp 的next ② temp 的 next 设为 node。如下图所示 最后如果遍历到 id 相同的节点则将 flag 设为 true 后退出循环并在循环外输出错误信息。
最终效果如下所示 其余的基础操作也是类似的想法去实现如删除操作也是传入 id 后遍历链表找到相同的 id 后将其从链表中断开temp.next temp.next.next。更新和删除操作对应代码如下
public void update(Node newNode){if (head.next null){System.out.println(链表为空);return;}Node temp head.next;boolean flag false;while(true){if (temp null){break;}if (temp.id newNode.id){flag true;break;}temp temp.next;}if (flag){temp.name newNode.name;} else {System.out.println(没有找到编号 newNode.id 的节点);}
}public void del(int id){Node temp head;boolean flag false;while (true){if (temp.next null){break;}if (temp.next.id id){flag true;break;}temp temp.next;}if (flag){temp.next temp.next.next;} else {System.out.println(没有找到编号 id 的节点);}
} 水
【完】