从零开始养成算法·篇三:单向循环链表的常规操作

如题所言,咱们不讲文字,直贴操作

1、单向循环链表的创建

创建

tips:

由于存在两种情况:

① 第一次开始创建; 

②已经创建,往里面新增数据

所以需要判断是否第一次创建链表

   YES->创建一个新结点,并使得新结点的next 指向自身; (*L)->next = (*L);

   NO-> 找链表尾结点,将尾结点的next = 新结点. 新结点的next = (*L);

2、单向循环链表的遍历

遍历

tips:循环链表的遍历最好用do while语句,因为头节点就有值

3、单向循环链表的根据值查位置

查找位置

tips:如果存在多个值一样,可以修改循环条件及返回数组

4、单向循环链表的根据位置查值


顺序
倒序

tips:这是网上很火的一个题目:查找倒数第K个元素,为了做对比,顺便写了查找顺数第K个元素

5、单向循环链表的插入

插入

tips:

1 如果插入的位置为1,则属于插入首元结点,所以需要特殊处理

1.1. 创建新结点temp,并判断是否创建成功,成功则赋值,否则返回ERROR

1.2. 找到链表最后的结点_尾结点

1.3. 让新结点的next 执行头结点

1.4. 尾结点的next 指向新的头结点

1.5. 让头指针指向temp(临时的新结点)

2 如果插入的位置在其他位置

2.1. 创建新结点temp,并判断是否创建成功,成功则赋值,否则返回ERROR

2.2. 先找到插入的位置,如果超过链表长度,则自动插入队尾

2.3. 通过target找到要插入位置的前一个结点, 让target->next = temp

2.4. 插入结点的前驱指向新结点,新结点的next 指向target原来的next位置 

6、单向循环链表的删除

删除

tips:

①.如果删除到只剩下首元结点了,则直接将*L置空;

②.链表还有很多数据,

     1 删除的是首结点

        1.1. 找到尾结点, 使得尾结点next 指向头结点的下一个结点 target->next = (*L)->next

        1.2. 新结点做为头结点,则释放原来的头结点

      2 如果删除其他结点--其他结点

        2.1. 找到删除结点前一个结点target

        2.2. 使得target->next 指向下一个结点

        2.3. 释放需要删除的结点temp

衍生:约瑟夫杀人问题

关键词:循环查询,循环删除

思路:循环查询的起始位置为循环删除返回,循环删除的删除地址为循环查询返回

骚操作:代码实现用的是另一种思路

递归
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容