java实现单链表的增删功能

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的指针将指向自己

 

原文地址:https://www.cnblogs.com/excellencesy/p/8646128.html