数据结构——链表

单向链表

单链表的创建和遍历

在学习链表之前,我还一直在想,数组在内存中是连续的,但是链表不连续,怎么去实现呢?我们难道还能像创建一个数组一样去创建一个叫做“链表”的数据结构?

原来链表是通过创建节点对象来实现的,在节点对象中存放目标数据和下一个对象的内存地址。相当于在队列中需要有一个数组来存放数据一样。

有个问题容易搞混,就是存放的下一个对象的地址,因为对象就是靠地址来区分的,所以地址就可以表示该地址所指向的对象。思考一下就能知道,最后一个有效元素的下一个地址为null,则说明最后元素的后一个元素是null,即已经没有有效数据了。

事实上,只要不给next赋值,它默认就是null。head.getNext()即是当前元素的属性值,也代表着下一个元素。

单向链表的创建、向末尾添加数据和遍历,代码如下:

public class OnewayLinkedListDemo {
    public static void main(String[] args) {
        OnewayLinkedList onewayLinkedList = new OnewayLinkedList();
        onewayLinkedList.show();
        System.out.println("------------------------------");
        Person p1 = new Person("宋江", 30);
        onewayLinkedList.addPerson(p1);
        onewayLinkedList.show();
        System.out.println("------------------------------");
        Person p2 = new Person("燕青", 24);
        onewayLinkedList.addPerson(p2);
        onewayLinkedList.show();
        System.out.println("------------------------------");
        Person p3 = new Person("吴用", 28);
        onewayLinkedList.addPerson(p3);
        onewayLinkedList.show();
        System.out.println("------------------------------");
        Person p4 = new Person("武松", 27);
        onewayLinkedList.addPerson(p4);
        onewayLinkedList.show();
    }
}

class OnewayLinkedList {
    // 先初始化一个头节点,后续不要动这个节点,不然容易乱套
    Person head = new Person("", 0);

    // 直接将数据添加到尾部
    public void addPerson(Person person) {
        // 这里因为不能动头节点,所以需要使用一个中间变量
        // temp一开始指向的是头节点
        Person temp = head;
        // 从头开始遍历,直到找到链表的末尾
        while (true) {
            if (temp.getNext() == null) {
                break;
            }
            // 如果还没到末尾,就把temp指针后移
            temp = temp.getNext();
        }
        // 循环一
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值