初学者用java实现基础单链表

初学者用java实现基础的单链表

java实现单链表

初学者应该实现的基本功能:

//用java实现单链表
@SuppressWarnings("all") // 禁止警告
public class LinkedList {

    private class Node{
        public int value;
        public Node next;

        public Node(int value) {
            this.value = value;
        }
    } //节点内部类
    private int size;  //链表长度
    private Node head,last;//头节点,尾结点

    public LinkedList(){
        head = null;
        size = 0;
    }
    //1.插入节点
    public void insert(int index,int value){
        if(index<0||index>size){
            System.out.println("位置不合理!");
        }
        Node node = new Node(value);
        if(index == 0){
            node.next = head;
            head = node;size++;
        }else if(index == size){
            last.next = node;
            last = node;size++;
        }else if(index > 0 && index < size){
            Node pre = head;
            for(int i=0;i<index-1;i++){
                pre = pre.next;
            }
            Node temp = pre.next;
            pre.next = node;
            node.next = temp;size++;
        }
    }
    //2.添加节点
    public void add(int value){
        Node node = new Node(value);

        if(head == null){
            head = node;last = node;size++;

        }else{
            last.next = node;
            last = node;
            size++;
        }
    }
    //3.返回节点
    public Node getNode(int index){
       if(index<0||index>size){
           System.out.println("位置不合理");
       }else{
           Node node= head;
           for(int i=0;i<index;i++){
               node = node.next;
           }
           return node;
       }
       return null;
    }
    //4.得到节点值
    public int get(int index){
        if(index<0||index>=size){
            System.out.println("位置不合理");
        }else{
            Node pre = head;
            for(int i=0;i<index;i++){
                pre = pre.next;
            }
            return pre.value;
        }
        return -1;
    }
    //5.删除节点
    public int delete(int index){
        int value = -1;
        if(index<0||index>size){
            System.out.println("位置不合理");return -1;
        }
        if(size == 0){
            System.out.println("没有元素被删除");return -1;
        }
        if(index == 0){
            value = this.getheader();
            head = head.next;size--;
        }else if(index == size-1) {
            value = this.getlaster();
            this.getNode(size-2).next = null;
            size--;
        }else{
            value = this.get(index);
            this.getNode(index-1).next = this.getNode(index+1);
            size--;
        }
        return value;
    }
    //6.判断是否为空
    public boolean isEmpty(){return size==0;}
    //7.返回节点数
    public int getSize(){return size;}
    //8.返回头节点值
    public int getheader(){return head.value;}
    //9.返回尾结点值
    public int getlaster(){return last.value;}
    //10.对单链表从小到大排序(选择排序)
    public void  sort(){
        for(int i=0;i<size;i++){
            int min = i;
            for(int j=i;j<size;j++){
                if(get(min)>get(j)){
                    min = j;
                }
            }
            int temp = getNode(min).value;
            getNode(min).value = getNode(i).value;
            getNode(i).value = temp;
        }

    }
    //11.遍历单链表
    public void print(){
        if(isEmpty()){
            System.out.println("单链表为空表");
        }else{
            Node pre = head;
            for(int i=0;i<size;i++){
                System.out.print(pre.value+" ");
                pre = pre.next;
            }
            System.out.println();
        }
    }
    //主测试类
    public static void main(String[] args) {
        LinkedList list = new LinkedList();
        list.add(3);
        list.add(1);
        list.add(6);
        list.insert(0,10);
        list.insert(3,2);
        System.out.println("链表中索引为3的值:"+list.get(3));
        System.out.println("链表的长度:"+list.getSize());
        System.out.println("链表头结点的值:"+list.getheader());
        System.out.println("链表尾结点的值:"+list.getlaster());
        list.print();
        list.sort();//排序
        list.print();
        System.out.println("链表头结点的值:"+list.getheader());
        System.out.println("链表尾结点的值:"+list.getlaster());
    }
}

实现结果:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值