美文网首页数据结构和算法分析算法
从零开始养成算法·篇三:单向循环链表的常规操作

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

作者: 文竹_自然 | 来源:发表于2020-04-02 15:59 被阅读0次

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

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

衍生:约瑟夫杀人问题

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

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

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

递归

相关文章

网友评论

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

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