java单链表使用总结

 更新时间:2022年01月23日 08:43:21   作者:孙霸天  
这篇文章主要为大家详细介绍了java单链表使用总结,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

链表的概念:

链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列节点(链表中的每一个元素称为节点)组成,节点可以在运行时动态生成。每个节点包含两个部分:一个是存储数据元素的数据域,另一个是存储下一个节点地址的指针域。相对于线性表顺序结构,操作复杂。由于不必按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时间复杂度分别是O(logn)和O(1)。

链表的优势

不需要知道数据的大小,可以充分利用计算机内存空间,实现灵活的内存动态管理
链表允许插入和移除表上任意位置上的节点(但是不允许随机存取)

链表的缺点

不能像数组一样随机读取
增加了空间的开销(增加了节点的指针域)

代码实现

定义一个节点类

public class ListNode {//定义节点类
    int val;
    ListNode next;
 
    ListNode(int x) {
        val = x;
    }
 
    //将数组的值赋给链表
    public ListNode getList(int[] sums) {
        ListNode dummyHead = new ListNode(0);
        ListNode curr = dummyHead;
        for (int i = 0; i < sums.length; i++) {
            curr.next = new ListNode(sums[i]);
            curr = curr.next;
        }
        return dummyHead.next;
    }
 
    //将链表的值赋给list并打印
    public void showList(ListNode listNode) {
        List list = new ArrayList();
        while (listNode != null) {
            list.add(listNode.val);
            listNode = listNode.next;
        }
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
    }
 
    /**
     * leetcode第二题
     *
     * 给出两个非空的链表用来表示两个非负的整数,
     * 其中,它们各自的位数是按照逆序的方式存储的,
     * 并且它们的每一个节点只能存储一位数组。
     * @param l1
     * @param l2
     * @return
     */
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode dummyHead = new ListNode(0);
        ListNode p = l1, q = l2, curr = dummyHead;
        int carry = 0;
        while (p != null || q != null) {
            int x = (p != null) ? p.val : 0;
            int y = (q != null) ? q.val : 0;
            int sum = carry + x + y;
            carry = sum / 10;
            curr.next = new ListNode(sum % 10);
            curr = curr.next;
            if (p != null) p = p.next;
            if (q != null) q = q.next;
        }
        if (carry > 0) {
            curr.next = new ListNode(carry);
        }
        return dummyHead.next;
    }
}

测试方法

public class main {
    public static void main(String[] args) {
        int a[] = {2, 4, 3};
        int b[] = {5, 6, 4};
        ListNode curr=new ListNode(0);
        ListNode l1=curr.getList(a);
//        curr.showList(l1);
        ListNode l2=curr.getList(b);
//        curr.showList(l2);
        ListNode l3=curr.addTwoNumbers(l1,l2);
        curr.showList(l3);
    }
 
 
}

输入[2,4,3],[5,6,4]

输出[7,0,8]

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • java必学必会之线程(2)

    java必学必会之线程(2)

    本文对java线程进行深入学习,重点介绍了线程同步问题、线程死锁问题,感兴趣的小伙伴们可以参考一下
    2015-12-12
  • springboot后端接收前端传数组参数三种方法

    springboot后端接收前端传数组参数三种方法

    这篇文章主要给大家介绍了关于springboot后端接收前端传数组参数三种方法,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2023-07-07
  • Java程序的初始化顺序,static{}静态代码块和实例语句块的使用方式

    Java程序的初始化顺序,static{}静态代码块和实例语句块的使用方式

    这篇文章主要介绍了Java程序的初始化顺序,static{}静态代码块和实例语句块的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • JAVA生成xml文件简单示例

    JAVA生成xml文件简单示例

    这篇文章主要介绍了JAVA生成xml文件的相关资料,在Java中可以使用DOM或者JDOM来生成XML文件,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2023-07-07
  • Netty分布式ByteBuf中PooledByteBufAllocator剖析

    Netty分布式ByteBuf中PooledByteBufAllocator剖析

    这篇文章主要为大家介绍了Netty分布式ByteBuf剖析PooledByteBufAllocator简述,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03
  • Java链表(Linked List)基本原理与实现方法入门示例

    Java链表(Linked List)基本原理与实现方法入门示例

    这篇文章主要介绍了Java链表(Linked List)基本原理与实现方法,结合实例形式分析了Java链表(Linked List)的功能、原理、实现方法与操作注意事项,需要的朋友可以参考下
    2020-03-03
  • 基于Spring AMQP实现消息队列的示例代码

    基于Spring AMQP实现消息队列的示例代码

    Spring AMQP作为Spring框架的一部分,是一套用于支持高级消息队列协议(AMQP)的工具,AMQP是一种强大的消息协议,旨在支持可靠的消息传递,本文给大家介绍了如何基于Spring AMQP实现消息队列,需要的朋友可以参考下
    2024-03-03
  • Spring中自定义数据类型转换的方法详解

    Spring中自定义数据类型转换的方法详解

    Spring3引入了一个core.onvert包,提供一个通用类型转换系统。在Spring容器中,可以使用这个系统作为PropertyEditor实现的替代,将外部化的bean属性值字符串转换为所需的属性类型。本文将详解这一系统的使用方法,需要的可以参考一下
    2022-06-06
  • spring AOP定义AfterThrowing增加处理实例分析

    spring AOP定义AfterThrowing增加处理实例分析

    这篇文章主要介绍了spring AOP定义AfterThrowing增加处理,结合实例形式分析了spring面向切面AOP定义AfterThrowing相关实现步骤与操作技巧,需要的朋友可以参考下
    2020-01-01
  • spring-boot-maven-plugin 配置有啥用

    spring-boot-maven-plugin 配置有啥用

    这篇文章主要介绍了spring-boot-maven-plugin 配置是干啥的,这个是SpringBoot的Maven插件,主要用来打包的,通常打包成jar或者war文件,本文通过示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-08-08

最新评论