单链表的基本用法

俗话说,熟能生巧,刚刚接触链表的时候,可能觉得这东西太不好理解了,代码是敲出来的,所以把最基本的链表中增、删、改、除练习的特别熟的时候,才会更容易明白以后得双链表以及他们的反转和各类题型,千里之行始于足下,所以我把单链表最基本用法写出来,希望可以帮助到你。


初始化

public class data1 {
    public static class Node{
        Node next;
        Object data;
        public Node(Object data){
            this.data = data;
        }
        public Node(Node next,Object data){
            this.data = data;
            this.next = next;
        }
    }
    private static int size;
    private static Node dummyNode;
    private data1(Node dummyNode){
        this.dummyNode = new Node(null,null);
    }

增删改除各类用法

//在任位置插入元素
    private static void add(int index,Object data){
        IsCheck(index);
        Node pre = dummyNode;
        Node newNode = new Node(data);
        for(int i=0; i<index; i++){
            pre=pre.next;
        }
        newNode.next = pre.next;
        pre.next = newNode;
        size++;
    }
    //头插
    private static void addFirst(int index, Object data){
        IsCheck(index);
        add(0,data);
    }
    //尾插
    private static void addLast(int index,Object data){
        IsCheck(index);
        add(size,data);
    }
    //找到当前结点
    private static Node get(int index){
        Node pre =dummyNode.next;
        for(int i=0; i<index; i++){
            pre=pre.next;
        }
        return pre;
    }
    //将某处的数据换成一个新的数据,返回旧数据
    private static Object set(int index,Object newData){
        IsCheck(index);
        Node node = get(index);
        Object oldData = node.data;
        node.data = newData;
        return oldData;
    }
    //移除某个结点
    private static void remove(int index){
        IsCheck(index);
        Node pre = dummyNode;
        for(int i=0; i<index; i++){
            pre=pre.next;
        }
        pre.next = pre.next.next;
        size--;
    }
    //清空链表
    private static void clear(){
        for(Node temp=dummyNode.next; temp.next!=null; temp=temp.next){
            temp.data= null;
            Node per = temp.next;
            temp.next=null;
            temp = per;
            size--;
        }
    }
    //检查是否包含某个数据
    private static boolean contains(Object data){
        for(Node temp = dummyNode.next; temp!=null; temp=temp.next){
            if (temp.data == data) {
                return true;
            }
        }
        return false;
    }

    //将链表中的元素存在数组中
    private static Object[] toArray(){
        Object[] arr = new Object[size];
        int i = 0;
        for(Node temp=dummyNode.next; temp!=null; temp=temp.next){
            arr[i] = temp.data;
            i++;
        }
        return arr;
    }

    //判断索引值是否合理
    private static void IsCheck(int index){
        if(index<0||index>size){
            System.out.println("索引值不合理!!");
        }
    }
    //链表大小
    public static int size(int size) {
        return size;
    }
    //输出链表
    private static void printf(){
        for(Node temp = dummyNode.next; temp!=null; temp = temp.next){
            System.out.print(temp.data+" ");
        }
    }

希望可以帮助到你。谢谢。`

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值