单链表实现-HashMap铺垫

单链表

你知道单链表长什么样子吗?嘿嘿,说起来感觉超级简单,但是写起来考虑的就多喽
在这里插入图片描述

代码

package NodeDemo;

/**
 * @param
 * @Author: judy
 * @Description:
 * @Date: Created in 20:02 2019/1/18
 */
public class Link {
    //初始化head为空
    Node head=null;

     /**
     * 创建头结点
     * @param data 数据
     */
    public void create(String data){
        //判断头肩点是否为空
        Node node = new Node(data);
        if (head == null) {
            head = node;
            return;
        }
        Node nodeNext= head;
        //说明不是最后一个,得到最后一个这样可以赋值node
        while (nodeNext.next != null){
            nodeNext = nodeNext.next;
        }
        //得到最后的一个地址指向节点
         nodeNext.next = node;
    }

    /***     *
     *
     * @param index 删除的节点的地址
     */
    public boolean deleteNode(int index){
        //1判断是否有节点
           //1.1节点长度左右边境
        //2删除是否为头结点
        //3删除指定为节点
        if(index<0 || lengthNode()<0){
            //不符合条件
            return false;
        }
        if(index==1){
            //删除头节点
            head=null;
            return true;
        }
        if(index>1){
            //1得到当前节点
            //2得到前一个节点
            //3得到后一个节点
           Node lastNode= head;

           //得到前一个节点,需要判断index
            Node findPreNode = head;
            int i=1;
            while (findPreNode.next!=null){
                if(index==i){
                 //找到要删除节点的后节点点
                    lastNode.next = findPreNode.next;
                    return true;
                 //找到删除节点后节点
                }else {
                    i++;
                    lastNode = findPreNode;  //前
                    findPreNode = findPreNode.next; //后
                }
            }
        }
        return true;
    }

    /**
     *
     * @return 链表长度
     */
    public int lengthNode(){
        //创建一个新的节点,为了下面循环节点
        Node node = head;
        int length = 0;
        //如果节点
        while (node.next != null){
            length ++;
            node=node.next;
        }
        return length;
    }

    //打印
    public void printNode(){
        Node nowNode= head;
        while (nowNode.next!=null){
            System.out.println(nowNode.data+",");
            nowNode= nowNode.next;
        }
    }
    public static void main(String[] args){
        Link link = new Link();
        link.create("9");
        link.create("8");
        link.create("7");
        link.create("6");
        link.create("5");
        link.printNode();
        System.out.println("---------------------");
        link.deleteNode(2);
        link.printNode();
    }
}

结果:9,
8,
7,
6,


9,
7,
6,

思路

先说一下思路把
1判断是否有节点
2判断头结点是否有数据
3插入头节点
4如果头结点不为空则先下一次插入数据
5删除节点
6获取节点长度
8得到要删除接地位置,然后node.next的时候一次判断是否相等,如果相等则删除

总结

单链表简单的实现了喽.谢谢靖峰同学~

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王雪芬-ghqr-264962

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值