为什么要用循环链表,因为查找遍历如果不从头结点开始的话,那么就无法遍历整个链表
循环链表:注意观察循环链表的结构
循环链表的结构通过循环链表,可以很明显地发现头指针的作用,头指针是链表的头,不论什么操作都要通过这个开始。而且这个指针可以用来表示链表名。
注意:头结点,头指针,尾节点,尾指针的理解。尾指针指向尾节点,头指针指向头结点,并不是说头尾指针的值等于头尾节点中的指针域的值,这是不对的。
循环链表用尾指针表示,没有用头指针表示。头结点可有可无
约瑟夫问题求解(无头结点的循环链表)
代码中的需要注意的地方循环链表的特点:
不需要增加存储结构,就能够快速获得头尾节点,这个其实很方便,对取尾的操作,降低算法复杂度。
如何快速判断单链表中是否有环:
方法一:比较步数算法,两个指针同时走,看步数是否相等,相等则无环,不相等则有环。
比较步数代码方法二:快慢指针
快慢指针方法上述方法一定要注意循环的控制,关于链表的循环的控制是重点
魔术师发牌问题:
问题的关键在于初始化一个循环链表,链表的data全部初始化为0,如果data不为0,说明该元素已经从链表中被拿出来。
初始化循环链表 算法关键拉丁方阵问题:这个问题其实可以不获取链表的长度,首先按顺序生成无头结点的循环链表,data域按照顺序递增,,第一行遍历输出,第二行从data为2开始遍历,直到下一次为2停止,第三次data域为3时开始,下一次为3停止
网友评论