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]

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

相关文章

  • OpenFeign设置header的三种方式总结

    OpenFeign设置header的三种方式总结

    在微服务间使用Feign进行远程调用时需要在header中添加信息,下面这篇文章主要给大家介绍了关于OpenFeign设置header的三种方式,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-04-04
  • 2020最新eclipse安装过程及细节

    2020最新eclipse安装过程及细节

    这篇文章主要介绍了2020最新eclipse安装过程及细节,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • java 启动参数 springboot idea详解

    java 启动参数 springboot idea详解

    这篇文章主要介绍了java 启动参数 springboot idea的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • Java8接口之默认方法与静态方法详解

    Java8接口之默认方法与静态方法详解

    java8中为接口新增了一项功能,定义一个或者更多个静态方法,类似于类中的静态方法,接口定义的静态方法可以独立于任何对象调用,下面这篇文章主要给大家介绍了关于Java8接口之默认方法与静态方法的相关资料,需要的朋友可以参考下
    2022-03-03
  • Mybatis-Plus默认主键策略导致自动生成19位长度主键id的坑

    Mybatis-Plus默认主键策略导致自动生成19位长度主键id的坑

    这篇文章主要介绍了Mybatis-Plus默认主键策略导致自动生成19位长度主键id的坑,本文一步步给大家分享解决方法,给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • SpringBoot集成ElasticSearch的示例代码

    SpringBoot集成ElasticSearch的示例代码

    Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎,本文给大家介绍SpringBoot集成ElasticSearch的示例代码,感兴趣的朋友一起看看吧
    2022-02-02
  • idea打不开双击IDEA图标没反应的快速解决方案

    idea打不开双击IDEA图标没反应的快速解决方案

    这篇文章主要介绍了idea打不开双击IDEA图标没反应的快速解决方案,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • 一文带你详细认识文件与Java中操作文件

    一文带你详细认识文件与Java中操作文件

    文件处理是任何应用程序的重要部分,Java 提供了许多用于创建、读取、更新和删除文件的方法,这篇文章主要给大家介绍了关于认识文件与Java中操作文件的相关资料,需要的朋友可以参考下
    2024-05-05
  • SpringMVC ModelAndView的用法使用详解

    SpringMVC ModelAndView的用法使用详解

    这篇文章主要介绍了SpringMVC ModelAndView的用法使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • Java使用@EnableEurekaServer实现自动装配详解

    Java使用@EnableEurekaServer实现自动装配详解

    这篇文章主要介绍了Java使用@EnableEurekaServer实现自动装配过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-10-10

最新评论