链表-java实现单向链表DEMO

以下为单向链表具体实现类(以下程序直接放入自定义类中)

	   private int size;//链表节点的个数
	   private Node head;//头节点
	    
	    public SingleLinkedList(){
	        size = 0;
	        head = null;
	    }
	    
	    //链表的每个节点类
	    private class Node{
	        private Object data;//每个节点的数据
	        private Node next;//每个节点指向下一个节点的连接
	        
	        public Node(Object data){
	            this.data = data;
	        }
	    }
	    
	    //在链表头添加元素
	    public Object addHead(Object obj){
	        Node newHead = new Node(obj);
	        if(size == 0){
	            head = newHead;
	        }else{
	            newHead.next = head;
	            head = newHead;
	        }
	        size++;
	        return obj;
	    }
	    
	    //在链表头删除元素
	    public Object deleteHead(){
	        Object obj = head.data;
	        head = head.next;
	        size--;
	        return obj;
	    }
	    
	    //查找指定元素,找到了返回节点Node,找不到返回null
	    public Node find(Object obj){
	        Node current = head;
	        int tempSize = size;
	        while(tempSize > 0){
	            if(obj.equals(current.data)){
	                return current;
	            }else{
	                current = current.next;
	            }
	            tempSize--;
	        }
	        return null;
	    }
	    
	    //删除指定的元素,删除成功返回true
	    public boolean delete(Object value){
	        if(size == 0){
	            return false;
	        }
	        Node current = head;
	        Node previous = head;
	        while(current.data != value){
	            if(current.next == null){
	                return false;
	            }else{
	                previous = current;
	                current = current.next;
	            }
	        }
	        //如果删除的节点是第一个节点
	        if(current == head){
	            head = current.next;
	            size--;
	        }else{//删除的节点不是第一个节点
	            previous.next = current.next;
	            size--;
	        }
	        return true;
	    }
	    
	    //判断链表是否为空
	    public boolean isEmpty(){
	        return (size == 0);
	    }
	    
	    //显示节点信息
	    public void display(){
	        if(size >0){
	            Node node = head;
	            int tempSize = size;
	            if(tempSize == 1){//当前链表只有一个节点
	                System.out.println("["+node.data+"]");
	                return;
	            }
	            while(tempSize>0){
	                if(node.equals(head)){
	                    System.out.print("["+node.data+"->");
	                }else if(node.next == null){
	                    System.out.print(node.data+"]");
	                }else{
	                    System.out.print(node.data+"->");
	                }
	                node = node.next;
	                tempSize--;
	            }
	            System.out.println();
	        }else{//如果链表一个节点都没有,直接打印[]
	            System.out.println("[]");
	        }
	        
	    }

以下为调用

	public static void main(String[] args) {
	    自定义类  singleList = new 自定义类();
	    singleList.addHead("A");
	    singleList.addHead("B");
	    singleList.addHead("C");
	    singleList.addHead("D");
	    //打印当前链表信息
	    singleList.display();
	    //删除C
	    singleList.delete("C");
	    singleList.display();
	    //查找B
	    System.out.println(singleList.find("B"));
	}

 

 

署名作者:YSOcean
来源地址:https://www.cnblogs.com/ysocean/p/7928988.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值