java 实现 单链表

class Node{
    public int val;
    public Node next;
    
    public Node(int val){
        this.val=val;
    }
    
}

class LinkList{
    private Node head;
    private Node tail;
    
    //链表对象增加节点
    public void addNode(Node node){
        if (this.head==null){ //链表初始化,第一个节点
            this.head=node;
            this.tail=node;
            this.tail.next=null;
        }
        else //链表最后挂载节点
        {
            this.tail.next=node;
            this.tail=node;
        }

    }
    
    //查询节点
    public Node getNode(int val)
    {
        Node temp=this.head;
        while (temp!=null)
        {
            if (temp.val==val)
            {
                return temp;
            }
            temp=temp.next;
        }
        return null;
        
        
    }
    
    //修改节点的值
    public void updateNode(int val,int value){
        Node temp=this.head;
        while (temp!=null)
        {
            if (temp.val==val)
            {
                temp.val=value;
            }
            temp=temp.next;
        }
    }
    
    //删除节点
    public Node deleteNode(int val){
        Node temp=this.head;
        if (this.head.val==val)
        {
            this.head=this.head.next;
            return temp;
        }

        
        while (temp.next!=null)
        {    
            
            if (temp.next.val==val)//直接判断的当前节点的下一个节点的值;
                                                      //所以必须判断下一个节点不能为null,即只判断到倒数第二个节点即可
            {    
                Node delNode=temp.next;
                temp.next=temp.next.next;  //当前节点直接连接下一个节点的下一个节点 从而实现删除,当前节点的下一个节点
                return delNode;
            }
            
            temp=temp.next;
            
            
        }
        
        return null;
    }
    
    //打印所有节点的值
    public void getAllNodes(){
        Node temp=this.head;
        while (temp!=null)
        {
            System.out.print(temp.val+" ");
            temp=temp.next;
        }
        System.out.println();
    }
}

public class TestLink
{
    public static void main(String[] args){
        LinkList ll=new LinkList();
        ll.addNode(new Node(1));
        ll.addNode(new Node(2));
        ll.addNode(new Node(3));
        ll.addNode(new Node(4));
        if (ll.getNode(3)!=null)
        {
            System.out.println(ll.getNode(3).val);
        }
        if (ll.getNode(5)!=null)
        {
            System.out.println(ll.getNode(5).val);
        }
        
        ll.updateNode(1,100);
        ll.updateNode(4,400);
        ll.updateNode(2,200);
        ll.updateNode(5,500);
        
        ll.addNode(new Node(5));
        ll.addNode(new Node(6));

        
        System.out.println("************");
        ll.deleteNode(6);
        ll.getAllNodes();
        ll.deleteNode(3);
        ll.deleteNode(1);
        ll.deleteNode(100);
        System.out.println("************");
        ll.getAllNodes();

    }
}
posted @ 2019-12-17 17:01  小金儿  阅读(189)  评论(0编辑  收藏  举报