老鹰抓小鸡之单链表

本文介绍了数据结构中的连续结构和跳转结构,以单链表为例,讲解了如何操作链表并演示了逆序链表的过程。作者通过老鹰抓小鸡游戏比喻链表结构,使概念更易理解。
摘要由CSDN通过智能技术生成

数据结构

从内存的角度看,数据结构其实无非就两种:

1,连续结构

2,跳转结构

什么叫做连续结构,每一个元素内存地址都是连续的,通过内存步长推导都是可以获取到的。

如数组,数组中的每一个元素的地址都是连续的。通过角标都是可以获取到的。

那什么又叫做,跳转结构呢。

顾名思义,每一个元素的内存地址不是连续的,这里一个那里一个,但是呢这些数据结构,每一个元素

都有一个指向下一个元素的指针,顺着这条指针,就能找到下一个元素,我们称之为链表。

这个也是我们今天主要描述的数据结构。单链表数据结构。

如果这个样子,不太好理解的话,你可以把,单链表想像成我们经常玩的一个很经典的游戏,就是老鹰抓小鸡的游戏,每一个小鸡都接在另外一个小鸡的后面。直到最前面的鸡妈妈,它的前面就不会再有小鸡了,面对的就是老鹰。这样从整体上就算是认识了一下,链表大概得模样。

下面是一张简易的,内存图,一个是数组的,一个是单链表的。

那么知道了,链表是这样样子后,我们怎么来操作这个链表呢?

获取元素,就是拿到,老鹰抓小鸡游戏中的每一个小鸡?

/**
    每一只小鸡。
*/
public class NodeList {
    int value;

    public NodeList(int val) {
        value = val;
    }
    
    /**
        每一只小鸡都要抓着下一只
    */
    NodeList next;
}


class Demo{
    
    public static void main(String[] args) {
        NodeList nodeList = new NodeList(1);
        nodeList.next = new NodeList(2);
        nodeList.next.next = new NodeList(3);
        nodeList.next.next.next = new NodeList(4);
        nodeList.next.next.next.next = new NodeList(5);

        /**
            获取每一个元素,直到找到鸡妈妈,就不在找
        */
        while (nodeList != null) {
            System.out.println(nodeList.value);
            nodeList = nodeList.next;
        }
    }
    
}

那么游戏升级了,要让最后一个小鸡体验一下做鸡妈妈,鸡妈妈做最后一个孩子。不是交换,是整个队伍调整。

由上面的题目的意思,好像是要把鸡队伍给倒序?好像是的,那么说干就干。

public class NodeList {
    int value;

    public NodeList(int val) {
        value = val;
    }

    NodeList next;
}

class Main {

    // 实现单列表逆序
    private static NodeList revertNodeList(NodeList head) {
        NodeList pre = null;
        NodeList next;
        while (head != null) {
            next = head.next;
            head.next = pre;
            pre = head;
            head = next;
        }
        return pre;
    }

   

    public static void main(String[] args) {
        NodeList nodeList = new NodeList(1);
        nodeList.next = new NodeList(2);
        nodeList.next.next = new NodeList(3);
        nodeList.next.next.next = new NodeList(4);
        nodeList.next.next.next.next = new NodeList(5);

        nodeList = revertNodeList(nodeList);

        while (nodeList != null) {
            System.out.println(nodeList.value);
            nodeList = nodeList.next;
        }
    }
}

通过上面的步骤,小小鸡也体会到了做妈妈的辛苦。

万事开头难,一步一步来,先从简单的实现开始做起,一点一点的体会吧。

  • 19
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值