java实现循环链表的增删功能,完整代码
package songyan.test.demo; public class Demo { // java 实现循环链表 public static void main(String[] args) { Node node1 = new Node("name1"); Node node2 = new Node("name2"); Node node3 = new Node("name3"); Node node4 = new Node("name4"); Node node5 = new Node("name5"); node1.setNextNode(node2); node2.setNextNode(node3); node3.setNextNode(node4); node4.setNextNode(node5); node5.setNextNode(node1); // getNodes(node1); // 添加node2.5 Node node11 = new Node("node2.5"); node11.setNextNode(node2.getNextNode()); node2.setNextNode(node11); // getNodes(node1); // 删除节点 node2.setNextNode(node3); getNodes(node1); } public static void getNodes(Node startNode) { // 循环遍历 Node node = startNode; do { System.out.println(node.getName()); node = node.getNextNode(); } while (node.getNextNode() != startNode.getNextNode()); } } class Node { private String name; private Node nextNode; public String getName() { return name; } public void setName(String name) { this.name = name; } public Node getNextNode() { return nextNode; } public void setNextNode(Node nextNode) { this.nextNode = nextNode; } Node(String name) { this.name = name; this.nextNode = null; } Node() { this.nextNode = null; } }
分段解读,
1,声明节点类【包括节点名称,指针】
class Node{ private String name; private Node nextNode; public String getName() { return name; } public void setName(String name) { this.name = name; } public Node getNextNode() { return nextNode; } public void setNextNode(Node nextNode) { this.nextNode = nextNode; } Node(String name) { this.name=name; this.nextNode=null; } Node() { this.nextNode=null; } }
2,创建节点
Node node1= new Node("name1"); Node node2= new Node("name2"); Node node3= new Node("name3"); Node node4= new Node("name4"); Node node5= new Node("name5");
3,设置指针
【这里不同于单链表的地方就是要给尾节点设置指向头结点的指针】
node1.setNextNode(node2);
node2.setNextNode(node3);
node3.setNextNode(node4);
node4.setNextNode(node5);
node5.setNextNode(node1);
3,循环遍历链表
注意:结束的条件不同于单链表的地方,
在单链表中结束条件是nextNode为空,
然而在这里,尾节点的指针式指向头结
点的,所以条件是节点的指针指向头结点
public static void getNodes(Node startNode) { // 循环遍历 Node node = startNode; do { System.out.println(node.getName()); node = node.getNextNode(); } while (node.getNextNode() != startNode.getNextNode()); }
4,添加节点
【这里与单向链表完全相同】
Node node11=new Node("node2.5"); node11.setNextNode(node2.getNextNode()); node2.setNextNode(node11);
4,删除节点
【这里与单向链表完全相同】
node2.setNextNode(node3);