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

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

作者: 文竹_自然 | 来源:发表于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