美文网首页
2018-03-19 循环链表

2018-03-19 循环链表

作者: Ceilen | 来源:发表于2018-03-21 12:47 被阅读0次

    为什么要用循环链表,因为查找遍历如果不从头结点开始的话,那么就无法遍历整个链表

    循环链表:注意观察循环链表的结构

    循环链表的结构

    通过循环链表,可以很明显地发现头指针的作用,头指针是链表的头,不论什么操作都要通过这个开始。而且这个指针可以用来表示链表名。

    注意:头结点,头指针,尾节点,尾指针的理解。尾指针指向尾节点,头指针指向头结点,并不是说头尾指针的值等于头尾节点中的指针域的值,这是不对的。

    循环链表用尾指针表示,没有用头指针表示。头结点可有可无

    约瑟夫问题求解(无头结点的循环链表)

    代码中的需要注意的地方

    循环链表的特点:

    不需要增加存储结构,就能够快速获得头尾节点,这个其实很方便,对取尾的操作,降低算法复杂度。

    如何快速判断单链表中是否有环:

    方法一:比较步数算法,两个指针同时走,看步数是否相等,相等则无环,不相等则有环。

    比较步数代码

    方法二:快慢指针

    快慢指针方法

    上述方法一定要注意循环的控制,关于链表的循环的控制是重点

    魔术师发牌问题:

    问题的关键在于初始化一个循环链表,链表的data全部初始化为0,如果data不为0,说明该元素已经从链表中被拿出来。

    初始化循环链表 算法关键

    拉丁方阵问题:这个问题其实可以不获取链表的长度,首先按顺序生成无头结点的循环链表,data域按照顺序递增,,第一行遍历输出,第二行从data为2开始遍历,直到下一次为2停止,第三次data域为3时开始,下一次为3停止

    相关文章

      网友评论

          本文标题:2018-03-19 循环链表

          本文链接:https://www.haomeiwen.com/subject/gjnuqftx.html