如题所言,咱们不讲文字,直贴操作
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
衍生:约瑟夫杀人问题
关键词:循环查询,循环删除
思路:循环查询的起始位置为循环删除返回,循环删除的删除地址为循环查询返回
骚操作:代码实现用的是另一种思路
递归
网友评论