Java链表基础

文章介绍了链表的概念,包括单向链表的结构,头结点和虚拟结点的作用。在Java中,链表涉及栈区和堆区的理解,通过new操作在堆中创建对象,形成链式结构。提供了LeetCode的ListNode模板作为链表实例的创建方法。
摘要由CSDN通过智能技术生成

 1.链表概念

         概念:单向链表就像一个铁链一样,元素之间相互连接,包含多个结点,每个结点有一个指向后继元素的next指针。表中最后一个元素的next指向null。如下图:

image.png

            头结点:链表的结构导致了只要知道首结点就可遍历完整个链表的结点,因此此结点在链表中有很大的作用,称为头结点。

            虚拟结点:由于头结点前没有任何结点,导致对链表进行任何增删改查时,都需要对头结点进行独立的一套增删改查操作。因此多设立一个虚拟结点,使其指针指向头结点,可以降低写代码的难度,虚拟结点中的值没有意义,一般不使用。

2.Java如何创建链表

        用Java创建链表前,首先需要知道JVM如何创建链表,JVM内分为栈区与堆区。

        栈区:存放函数的参数值、局部变量等,由编译器自动分配和释放,通常在函数执行完后就释放了,其操作方式类似于数据结构中的栈。栈内存分配运算内置于CPU的指令集,效率很高,但是分配的内存量有限。

        堆区:就是通过new、malloc、realloc分配的内存块,编译器不会负责它们的释放工作,需要用程序区释放。我们创建的真正对象一般存在堆里,栈区一般存的是该对象的引用。

        例如,当我们创建如下类:

        

public class People{
        private People father;
        private People mother;
}

        father和mother就是指向堆的真实对象的引用,如果我们像下面方式创建:

        

public class Course{
        private int val;
        private Course next;
}

        此时Course对象中的next值,就继续指向了一个新的Course对象。

        

         这里通过栈中的引用(也就是地址)就可以找到val(1),然后val(1)结点又存了指向val(2)的地址,而val(3)又存了指向val(4)的地址,所以就构造出了一个链条访问结构。

 3.Java定义与创建链表实例

        Leetcode提供的java链表模板如下:

        

public class ListNode{
        private int val;
        private ListNode next;
        
        ListNode(int x){
            this.val = x;
            this.next = null;
        }
}
ListNode listNode = new ListNode(1);

        虽然此模板没有提供对val值与next值对应的set与get方法,违反了面向对象设计的要求,但是大大提高了精简度,因此在单链表题目中被广泛使用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值