JAVA 实现单链表的增删功能
package linked; class LinkedTable{ } public class LinkedTableTest { 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); System.out.println("*******初始链表*******"); //循环遍历单链表 outLinked(node1); System.out.println(); //插入节点在node2的后面 addNode(node2); System.out.println("*****插入node2.5后的链表*****"); //循环遍历单链表 outLinked(node1); System.out.println(); //删除节点 node2.setNextNode(node3); System.out.println("*******删除node2.5*******"); //循环遍历单链表 outLinked(node1); System.out.println(); } public static void outLinked(Node node1){ Node node= new Node(); node.setNextNode(node1); do { node=node.getNextNode(); System.out.print(node.getName()+"----"); }while(node.getNextNode()!=null); } public static void addNode(Node preNode) { Node node_add = new Node("name2.5"); node_add.setNextNode(preNode.getNextNode()); preNode.setNextNode(node_add); } } class Node { private String name; private Node nextNode; public void setName(String name) { this.name=name; } public void setNextNode(Node nextNode) { this.nextNode=nextNode; } public String getName() { return this.name; } public Node getNextNode() { return this.nextNode; } public Node(String name) { this.name=name; this.nextNode=null; } public Node( ) { } }
单链表添加节点:
public static void addNode(Node preNode)
{
Node node_add = new Node("name2.5");
node_add.setNextNode(preNode.getNextNode());
preNode.setNextNode(node_add);
}
S1:创建新节点(node_add)
S2:新节点的next指针指向要插入位置上一个节点(node2)的指针指向的节点
【node2.5----->node2.nextnode()】
S3:将要插入位置上一个节点(node2)的指针指向新的节点
【node2------->node2.5】
注意:
S2与S3的顺序不可发生改变。
如果调换顺序:
【node2------->node2.5】这一步执行完后,node2的指针就会指向node2.5【node2.nextnode()=node2.5】,node3没有任何指针指向他
【node2.5----->node2.nextnode()】在执行这一步的时候,node2.5的指针将指向自己