数据结构与算法[单链表结构用java代码实现]



public class SingleLinkedList {
//2.针对单链表 :节点个数 便与遍历;还有一个是头节点;
    private int size;//节点个数
    private Node head;//头节点
    /**
     * 元素:节点
     */
    private class Node{
        private Object data; //内部类的元素,存放类型是object
        private Node next; //指向下一个节点地址

        public Node() {
        }

        public Node(Object data) {
            this.data = data;
        }
    }

    /**
     * 添加节点 从头部插入节点
     * @param obj
     * @return
     */
    public Object addNode(Object obj){
        Node newHead = new Node(obj); //每次新加的节点都是头节点
//        if(size == 0){
//            head = newHead; //没有数据则头指针数据指向新增加的节点元素
//        }else{
//            newHead.next=head;//当前节点的下一个节点的地址是原先head的地址
//            head = newHead;//将head指向当前节点
//        }
        newHead.next=head;
        head = newHead;
        size++;
        return obj;
    }

    /**
     * 判断单链表是否为空
     * @return
     */
    public boolean isEmpty(){
        return size==0;
    }

    /**
     * 删除头节点
     * @return
     */
    public Object deleteHead(){
        Node node = head;
        head = head.next;
        size--;
        return node;

    }

    /**
     * 查找元素节点
     * @param obj
     * @return
     */
    public Node find(Object obj){
        Node current = head;
        int tempSize = size;
       while(tempSize>0){
           if(current.data.equals(obj)){//equals比较的是object的内容
                return current;
           }else{
               current = current.next;
           }
           tempSize--;
       }
        return null;
    }

    /**
     * 删除节点
     * @param obj
     * @return
     */
    public Node deleteNode(Object obj){
        if(size==0) return null;
        Node current  = head;//指定当前元素节点为头节点
        Node previous = head;//指定前驱节点为头节点
        while(current.data != obj){ //如果当前节点的数和待删除的数不一致则继续
            if(current.next != null){
                previous = current;
                current = current.next;
            }else{
                return null;
            }
        }
        //判断如果当前节点是第一个head节点
        if(current.equals(head)){
            head = current.next;
            size--;
        }else{ //删除不是头节点的
            //当前节点不再有任何节点指向它,当前节点的前驱节点直接指向了当前节点的下一个节点
            previous.next=current.next;
            size--;
        }
        return current;
    }

    /**
     * 遍历单链表
     * @param args
     */
    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) {
        System.out.println("hhh");
        SingleLinkedList singList = new SingleLinkedList();
        singList.addNode("zhangsan");
        singList.addNode("lisi");
        singList.addNode("wangwu");
        singList.display();
        singList.deleteHead();
        singList.display();
       Node node = singList.find("zhangsan");
        System.out.println(node.data);
        singList.display();
       Node den = singList.deleteNode("lisi");
        System.out.println(den.data);
        Node den1 = singList.deleteNode("zhangsan");
        singList.display();
    }
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值