链表的Java语言实现


这不是各种算法竞赛来了嘛,毕竟卷算法的大佬们走的都是C赛道,有言曰“人卷我逃,人逃我卷”,于是果断选择Java赛道。但是确实没打过Java赛道啊,赶紧用Java实现几个常用的算法和数据结构练练手。

在打C赛道的竞赛时,算法书都推荐使用结构体来实现链表,毕竟C语言还没有类,都是这么搞的。

但都1202年了,当然要用上现代化的面向对象了。毕竟古典的结构体实现方法和类很像,都有独立的多个对象和内置属性。而且java不需要指针了,好耶!

所以,开始吧~

一、定义节点类

class Node{
        int v;//节点值
        Node next;//下一个节点
    }

定义Node类,支持单向指向,包含一个携带的值和下一个节点的引用。

作为类,可以添加构造方法来初始化:

Node(int value){
            v = value;
        }

写完以后就可以实操了。

二、创建链表

创建一个包含6个节点的链表:

注意Node类要写在程序主类的外面,否则main函数是没法直接创建非静态子类的对象的。

另外还要注意起始点一定要存下来,用起点来代表整个列表,不然没有引用了整个列表就找不到了。

三、链表的基本操作

创建完链表以后,下面对链表进行一些基本操作。

1. 遍历

遍历结束的条件是当前Node的next为null,即没有被分配下一个的点,就是结尾了。

输出结果:

0 1 2 3 4 5

2. 插入节点

具体操作是先遍历到目标节点,然后新建节点使老节点指向它,然后再设置它的下一节点重新接回链表。

单独开个新方法实现比较好。

然后在主程序里调用:

输出效果:

0 1 2 233 3 4 5

3. 替换节点

把目标节点的下一个节点给它的前一个节点即可。

4.删除节点

类似替换,只不过不建新节点了。

其他

链表的意义在于删除/替换/插入节点效率相较于普通数组更快。如果要遍历的话,效率反而更慢。

Java其实自带了LinkedList类,可以直接使用。那我为什么还要手写

用法:

LinkedList<String> sites = new LinkedList<>(); 声明链表

sites.add("mcyou.cn"); 添加元素

System.out.println(sites.get(1)); 根据索引获取元素

......

最后更新于