美文网首页
有序链表的实现

有序链表的实现

作者: 吉他手_c156 | 来源:发表于2020-06-07 17:27 被阅读0次

话不多说上代码

/**
 * 有序链表
 */
public class OrderLinkedList {

    // 链表中的节点
    private class Node{
        private int data;
        private Node next;
        public Node(int data){
            this.data = data;
        }
    }
    private Node head;
    private int size;
    public OrderLinkedList(){
        this.head = null;
        this.size = 0;
    }

    // 插入节点
    public int insert(int value){
        // 构建新的节点
        Node node = new Node(value);
        Node pre = null;
        Node curr = head;
        // 如果 curr 不为 null 说明链表中有节点
        // 如果插入的值 大于 当前节点的值则找下一个节点
        // 直到找到一个比当前节点小的节点
        while (curr != null && value > curr.data){
            pre = curr;
            curr = curr.next;
        }

        // 如果走到这里证明要插入的节点已经小于 curr 节点

        // pre == null 说明插入的节点已经小于头节点
        // 要将出入节点设置到头节点之前
        if(pre == null){
            // 将新节点指向头节点
            head = node;
            // 在将头节点的 next 节点指向到 curr 节点
            // 走到这里 curr 就代表之前的头节点
            // 将新头节点的 next 设置为 jiu的头节点 curr 就是将元素插到了第一位
            head.next = curr;
        }else{
            // 由于 pre 节点的 next 节点本来指向的是 curr 节点
            // 但是新插入的节点小于 curr 节点要将新节点 插入到 curr 之前
            // 所以这里将 pre 的next 指向 新节点
            // 将新节点的 next 指向 curr 节点
            pre.next = node;
            node.next = curr;
        }
        size ++;
        return value;
    }

    // 删除头节点
    public void deleteHead(){
        if(size == 0){
            throw new RuntimeException("没有节点信息");
        }
        head = head.next;
        size --;
    }

    // 打印数据
    public void display(){

        if(size == 0){
            System.out.println("暂无节点数据");
        }

        Node curr = head;

        while (curr != null){
            System.out.print(curr.data+" ,");
            curr = curr.next;
        }
        System.out.println();
    }

    public static void main(String[] args) {
        OrderLinkedList orderLinkedList = new OrderLinkedList();
        System.out.println("*****************  添加无序节点  *****************");
        System.out.print(orderLinkedList.insert(10)+" ,");
        System.out.print(orderLinkedList.insert(9)+" ,");
        System.out.print(orderLinkedList.insert(53)+" ,");
        System.out.print(orderLinkedList.insert(36)+" ,");
        System.out.println();
        System.out.println("*****************  显示排序后的节点  *****************");
        orderLinkedList.display();
        System.out.println("*****************  删除头节点  *****************");
        orderLinkedList.deleteHead();
        orderLinkedList.display();
    }
}

结果

*****************  添加无序节点  *****************
10 ,9 ,53 ,36 ,
*****************  显示排序后的节点  *****************
9 ,10 ,36 ,53 ,
*****************  删除头节点  *****************
10 ,36 ,53 ,

相关文章

网友评论

      本文标题:有序链表的实现

      本文链接:https://www.haomeiwen.com/subject/iygctktx.html