数据结构——链表

本文详细介绍了链表的基本概念,包括链表的节点结构和Java中的实现。讨论了链表的插入(尾插法、头插法、指定位置插入)、删除操作,以及链表的输出方法。还探讨了链表的相关算法,如找到中间节点、判断链表是否成环及其相遇点、截取链表后k个节点。最后,文章讲解了单链表的反转,包括头插法和就地逆置法的详细步骤。
摘要由CSDN通过智能技术生成

链表

链表是链式存储

image-20220613140306383

链表的节点有两部分组成:value和next

image-20220613140334805

image-20220613140500419

java如何构建节点呢?

java的内存分为栈和堆内存

栈中往往存放变量。堆中往往存放对象

image-20220613140648880

每个节点在java中都可以视为一个对象:对象中存在两个全局变量也就是value和next值

那么对象如何创建呢?

类是对象的模板

package com.qcby.datastructure.List;

public class ListNode {
   
    int value;//节点的数据区域
    ListNode next;//记录下一个节点的地址
    //构造器、
    public ListNode(int value) {
   
        this.value = value;
    }
     @Override
    public String toString() {
   
        return "ListNode{" +
                "value=" + value +
                ", next=" + next +
                '}';
    }
}
package com.qcby.datastructure.List;

public class Test {
   
    public static void main(String[] args) {
   
        ListNode node1 = new ListNode(3);
        ListNode node2 = new ListNode(4);
    }
}

问题一:next为什么是ListNode类型的数据

Java是强类型语言。定义什么样的类型就是要在内存中开辟什么样的空间。如int类型就只开辟32bit空间(1符号位31数值位)

ListNode node1 = new ListNode(3);

我们直接访问node 的时候,得到的是地址的值。说明node1在堆内存当中存储着ListNode类型对象的地址,而next是存放下一个ListNode类型对象的地址,node1是ListNode类型,那么next也只能是ListNode类型

链表的插入

尾插法

插入的数据是顺序

package com.qcby.datastructure.List;

public class LinkList {
   

    public ListNode head =null;

    /**
     * 尾插法
     * @param value,要插入的值
     */
    public void insert(int value){
   
        ListNode listNode =new ListNode(value);
        if (head==null){
   
            head = listNode;
            return;
        }
        ListNode indexNode = head;
        while (indexNode.next !=null){
   
            indexNode = indexNode.next;
        }
        listNode.next=listNode;
    }
}

package com.qcby.datastructure.List;

public class Test {
   
    public static void main(String[] args) {
   
        LinkList linkList =new LinkList();
        //通过尾插法插入数据
        linkList.insert(1);
        linkList.insert(2);
        linkList.insert(3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值