线性链表2(环形链表和双向链表,还有躲在角落瑟瑟发抖的双向环形链表)
环形链表
按照上一篇博客的方式用head头结点的话,那构建环形链表的方式就是
1.去掉头节点,
2.将最后一个结点的指针域(原来是NULL)改成指向第一个结点
这时作为函数头节点的就是原本最后的一个结点。(因为这样保证了头节点的下一个就是第一个结点)
就长这样。
和正常的单链表有所不同,首先是判空的条件,原来的为head->next 为NULL,而现在就是head为NULL
其次在循环的时候就不应该以NULL为结束的标志了。
最后,在插入和删除的时候,和之前稍有不同,建议画图体会一下。
也可以不删除头节点,将其依旧留在原来的链表中,被最后一个结点连上,这样的话判空就是head->next为head;
好处呢,就是可以直接从任意一个结点出发遍历所有的结点,比较方便。
双向链表
也是一种为了方便操作的形式,单链表是一个结点指向后面的元素,这玩意是前后都可以指向。
就是这样的,同样给他按一个表头结点吧,比较舒服。
这时,判空、插入删除、遍历的方式都可能有所不同。
友情提示,双向链表的插入删除操作因为修改指针比较多,做题经常看到,注意不要断链了就行。(答案不唯一)
双向环形链表
相信这个就不用说了吧,就是上面两个的结合,操作就更麻烦了。(个人感觉平时涉及不多,了解一下就行了吧)