链表-Java实现

简介: 链表

链表

  public void Insert(E data,int index){
   
        if (index < 0 || index > length){
   
            throw new IllegalArgumentException("插入位置不合法");
        }

        Node<E> prev = head;
        while (index > 0){
   
            prev = prev.next;
            index--;
        }

        Node<E> newNode = new Node<>(data);
        newNode.next = prev.next;
        prev.next = newNode;
        length++;
    }


public E Delete(int index) {
   
        if (index < 0 || index > length) {
   
            throw new IllegalArgumentException("删除位置不合法");
        }
        Node<E> prev = head;
        while (index > 0) {
   
            prev = prev.next;
            index--;
        }
        E data = prev.next.data;
        prev.next = prev.next.next;
        return data;
    }


public E Get(int index) {
   
        if (index < 0 || index > length) {
   
            throw new IllegalArgumentException("获取位置不合法");
        }
        Node<E> cur = head.next;
        while (index > 0) {
   
            cur = cur.next;
            index--;
        }
        return cur.data;
    }


总览

package com.collection;

/**
 * @author WangYH
 * @version 2021.1.3
 * @date 2023/4/29 21:28
 */

public class LinkList<E> {
   

    private final Node<E> head = new Node<>(null);
    private int length = 0;

    private static class Node<E> {
   
        private E data;
        private Node<E> next;

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

    public void Insert(E data,int index){
   
        if (index < 0 || index > length){
   
            throw new IllegalArgumentException("插入位置不合法");
        }

        Node<E> prev = head;
        while (index > 0){
   
            prev = prev.next;
            index--;
        }

        Node<E> newNode = new Node<>(data);
        newNode.next = prev.next;
        prev.next = newNode;
        length++;
    }

    public E Delete(int index) {
   
        if (index < 0 || index > length) {
   
            throw new IllegalArgumentException("删除位置不合法");
        }
        Node<E> prev = head;
        while (index > 0) {
   
            prev = prev.next;
            index--;
        }
        E data = prev.next.data;
        prev.next = prev.next.next;
        return data;
    }

    public E Get(int index) {
   
        if (index < 0 || index > length) {
   
            throw new IllegalArgumentException("获取位置不合法");
        }
        Node<E> cur = head.next;
        while (index > 0) {
   
            cur = cur.next;
            index--;
        }
        return cur.data;
    }

    @Override
    public String toString() {
   
        System.out.println("length = " + length);
        StringBuilder builder = new StringBuilder();
        Node<E> cur = head.next;
        while (cur != null) {
   
            builder.append(cur.data).append(" ");
            cur = cur.next;
        }
        return builder.toString();
    }
}


测试

package com.collection;

/**
 * @author WangYH
 * @version 2021.1.3
 * @date 2023/4/29 21:42
 */

public class Main {
   
    public static void main(String[] args) {
   
        LinkList<Integer> linkList = new LinkList<>();
        linkList.Insert(1, 0);
        linkList.Insert(2,1);
        linkList.Insert(3,2);
        System.out.println(linkList);

        linkList.Delete(0);
        System.out.println(linkList);
        System.out.println(linkList.Get(0));
    }
}
目录
相关文章
|
3月前
|
Java
java数据结构,双向链表的实现
文章介绍了双向链表的实现,包括数据结构定义、插入和删除操作的代码实现,以及双向链表的其他操作方法,并提供了完整的Java代码实现。
java数据结构,双向链表的实现
|
2月前
|
存储 安全 Java
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
26 3
|
6月前
|
Java
环形数组链表(java)
环形数组链表(java)
|
4月前
|
存储 Java
|
4月前
|
存储 Java
java实现单链表的创建、增、删、改、查
这篇文章详细介绍了Java中如何实现单链表的创建以及对单链表进行增加、删除、修改、查询等操作的方法,并提供了相应的代码示例。
java实现单链表的创建、增、删、改、查
|
4月前
|
存储 Java 开发者
揭秘!HashMap底层结构大起底:从数组到链表,再到红黑树,Java性能优化的秘密武器!
【8月更文挑战第24天】HashMap是Java集合框架中的核心组件,以其高效的键值对存储和快速访问能力广受开发者欢迎。在JDK 1.8及以后版本中,HashMap采用了数组+链表+红黑树的混合结构,实现了高性能的同时解决了哈希冲突问题。数组作为基石确保了快速定位;链表则用于处理哈希冲突;而当链表长度达到一定阈值时,通过转换为红黑树进一步提升性能。此外,HashMap还具备动态扩容机制,当负载因子超过预设值时自动扩大容量并重新哈希,确保整体性能。通过对HashMap底层结构的深入了解,我们可以更好地利用其优势解决实际开发中的问题。
117 0
|
4月前
|
存储 Java
【Java集合类面试十】、HashMap中的循环链表是如何产生的?
在多线程环境下,HashMap在扩容时如果发生条件竞争,元素的插入顺序可能形成循环链表,导致死循环。
|
4月前
|
存储 Java
java实现双向链表的增删改查
这篇文章展示了如何在Java中实现双向链表的增加、删除、修改和查询操作,并通过代码示例演示了在双向链表中存储和操作学生信息的过程。
|
4月前
|
算法 Java
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
55 0
|
4月前
|
存储 算法 Java
LeetCode初级算法题:反转链表+统计N以内的素数+删除排序数组中的重复项Java详解
LeetCode初级算法题:反转链表+统计N以内的素数+删除排序数组中的重复项Java详解
46 0