单项链表实现原理

node

package ch04;

/**
 * 节点 包含一个指针跟一个数据存储
 * Created by duyizhen on 2018/3/31.
 */
public class Node {
    private long data; // 存放的数据
    private Node next; // 下一个节点是谁

    public Node(){}

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

    /**
     * 获取节点内部的数据
     * @return
     */
    public long getData() {
        return data;
    }

    /**
     * 设置节点内部的数据
     * @param data
     */
    public void setData(long data) {
        this.data = data;
    }

    /**
     * 获取下一个节点
     * @return
     */
    public Node getNext() {
        return next;
    }

    /**
     * 设置下一个节点
     * @param next
     */
    public void setNext(Node next) {
        this.next = next;
    }

    public void display(){
        System.out.println(data + "");
    }
}
 

LinkedList

package ch04;

/**
 * Created by duyizhen on 2018/3/31.
 */
public class LinkedList {

    private Node first; // 车头节点

    public LinkedList(){
        first = null;
    }

    /**
     * 头结点之后进行插入一个节点
     */
    public void insertAfterFirst(Node node){
        if(first != null){
            Node next = first.getNext();
            first.setNext(node);
            node.setNext(next);
        }else{
            first = node;
        }
    }

    /**
     * 在头结点之前插入一个节点
     * @param node
     */
    public void insetBeforFirst(Node node){
        Node oldFirst = first;
        first = node;
        node.setNext(oldFirst);
    }

    /**
     * 替换掉头结点
     * @param node
     */
    public void replaceFirst(Node node){
        if(first != null){
            Node next = first.getNext();
            first = node;
            first.setNext(next);
        }else{
            first = node;
        }
    }

    /**
     * 删除掉头结点
     */
    public void removeFirst(){
        if(first != null){
            Node next = first.getNext();
            first = next;
        }
    }

    /**
     * 展示方法
     */
    public void show(){
        Node node = first;
        if(node != null){
            while(node != null){
                System.out.print("[" + node.getData() + ",");
                node = node.getNext();
            }
            System.out.println("]");
        }else{
            System.out.println("[]");
        }
    }

    /**
     * 查找元素
     * @param value
     * @return
     */
    public Node find(long value){
        if(first != null){
            Node node = first;
            while(node != null){
                if(node.getData() == value){
                    return node;
                }
                node = node.getNext();
            }
        }
        return null;
    }

    /**
     * 删除方法  必须记录前一个节点跟后一个节点
     *
     * @param value
     * @return
     */
    public Node remove(long value){
        Node result = null;
        Node lastNode = null;
        if(first != null){
            if(first.getData() == value){
                result = first;
                first = first.getNext();
                return result;
            }
            Node node = first;
            first = lastNode;
            while(node != null){
                if(node.getData() == value){
                    result = node;
                    return result;
                }else{
                    lastNode = node;
                    node = node.getNext();
                }
            }
        }
        return null;
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值