leetcode网解题心得——61. 旋转链表
leetcode网解题心得——61. 旋转链表
1、题目描述
给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。如图:
试题链接:https://leetcode-cn.com/problems/rotate-list/
2、算法分析:
为了完成该算法,在进行代码编写时先进行了数学分析,下面照片是数学分析的草稿,图可能有些丑。
下面解释下该图:
- 由于题目是循环列表,可以将单链表进行打断,组成一个圆圈。而指针所指的方向即是起点。
- 模拟循环,由循环后的结果可以得出,如果循环次数恰好为一圈时等于没循环。
- 同时,可以很简单的看出,k=几,就相当于顺时针转动k步
- 由于单链表只是一侧的,在图上更方便逆时针转动,因此可计算出逆时针转动的步数=角-k
3、用自然语言描述该算法
- 先求得链表的长度,即为多边形角度
- 遍历单链表,到最后一个位置,然后将指向修改为指向头结点,打造成环形链表
- 由分析计算出来的公式,逆时针将辅助指针旋转角度-k-1步,位于所要的结果前一个
- 保存下一个结点,因为打断后无法过去,需要先保存
- 打断循环链表,返回保存的结点
4、java语言实现
public static ListNode rotateRight(ListNode head, int k) {
if(head == null) return null;
//1,需要知道链表的长度
ListNode pCurrent = head;
int count = 1;
while(pCurrent.next != null) {
//计数
count++;
//向下
pCurrent = pCurrent.next;
}
//循环结束后,指向的是最后一个结点,对接成循环链表
// System.out.println(count);
pCurrent.next = head;
//指向头,循环链表
pCurrent = pCurrent.next;
//计算有效循环
int total = k % count;
//计算顺转次数
total = count - total;
// System.out.println(total);
for(int i = 1;i < total;i++) {
pCurrent = pCurrent.next;
}
//保存下一个结点
ListNode saveNode = pCurrent.next;
pCurrent.next = null;
return saveNode;
}
算法效果:
算法分析,时间上还行,但是空间上消耗较大。
5、C语言实现
struct ListNode* rotateRight(struct ListNode* head, int k){
if(head == NULL) return NULL;
//1,需要知道链表的长度
struct ListNode* pCurrent = head;
int count = 1;
while(pCurrent->next != NULL) {
//计数
count++;
//向下
pCurrent = pCurrent->next;
}
//循环结束后,指向的是最后一个结点,对接成循环链表
// System.out.println(count);
pCurrent->next = head;
//指向头,循环链表
pCurrent = pCurrent->next;
//计算有效循环
int total = k % count;
//计算顺转次数
total = count - total;
// System.out.println(total);
for(int i = 1;i < total;i++) {
pCurrent = pCurrent->next;
}
//保存下一个结点
struct ListNode* saveNode = pCurrent->next;
pCurrent->next = NULL;
return saveNode;
}
算法效果:
算法分析:根据C语言的提交结果可知,在时间和内存消耗上都较为一般
leetcode网解题心得——61. 旋转链表的更多相关文章
- Java实现 LeetCode 61 旋转链表
61. 旋转链表 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: 1->2->3->4->5->NULL, k = ...
- 【LeetCode】61. 旋转链表
61. 旋转链表 知识点:链表: 题目描述 给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置. 示例 输入:head = [1,2,3,4,5], k = 2 输出:[4 ...
- LeetCode 61. 旋转链表(Rotate List)
题目描述 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: 1->2->3->4->5->NULL, k = 2 输出 ...
- 61. 旋转链表-leetcode
给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: 1->2->3->4->5->NULL, k = 2 输出: 4-& ...
- leetcode 61. 旋转链表
题目描述: 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: 1->2->3->4->5->NULL, k = 2 输 ...
- LeetCode 61——旋转链表(JAVA)
给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: 1->2->3->4->5->NULL, k = 2 输出: 4-& ...
- leetcode刷题-61旋转链表
题目 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: 1->2->3->4->5->NULL, k = 2输出: 4 ...
- LeetCode 61——旋转链表
1. 题目 2. 解答 2.1. 方法一 将链表每个节点向右移动 1 个位置,其实就是让链表最后一个结点指向第一个结点. 因此,向右移动 k 个位置就重复上述过程 k 次即可. 然后,我们注意到,若链 ...
- LeetCode:旋转链表【61】
LeetCode:旋转链表[61] 题目描述 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: 1->2->3->4->5- ...
随机推荐
- Linux服务器上实现数据库和图片文件的定时备份
一. 1.首先创建一个目录,用于存放备份的数据 2.在该目录下创建两个子目录一个用于存放数据库的信息,一个用于存放图片资源 3.#数据库的备份 执行下面的命令 mysqldump ...
- 395. 至少有K个重复字符的最长子串
Q: A: 分治,对于字符串s的任何一个字符,如果它的频数(在s中出现的次数)小于k,则它一定不会出现在最后的结果里,也就是从它的位置一劈两半,考察左右.对于当前字符串s,我们先建立字典统计其中每种字 ...
- webpack 打包增加版本信息
What do we need? 笔者目的是在vue项目打包后的 dist/index.html 文件中写入本次打包git用户.最后一次git提交信息,这样做的目的是便于线上项目的管理和防止同事之间的 ...
- [坑] js indexOf is not a function
今天写js的时候,本来没有问题的代码突然出现了问题,就是本来下拉框里面在更新之后会出现内容的 但是并没有出现内容,按下F12 查看了Console之后发现确实是接收到了数据,但是却也报错了 内容是 我 ...
- java读/写文件
读取文件参考:https://blog.csdn.net/weixin_42129373/article/details/82154471 写入文件参考:https://blog.csdn.net/B ...
- Linux - Shell - 在多个文件中查找关键字
1. 概述 在多个文件中 查找内容 2. 想干啥 目的 在 多个文件 中, 查找内容 准备 之前在 单个文件里 查找过内容 工具 awk 前提 文件有固定格式 查找时有字段的要求 例子 # print ...
- Linux - Shell - date
概述 date 命令 准备 OS CentOS 7.6 基本功能 显示时间 格式化时间 翻译时间 转换时间格式 切换时区 设置时间 查看文件最后使用时间 1. 显示时间 概述 基本功能 命令 # 内容 ...
- 【Vue路由系统详述】
目录 路由命名 路由参数 路由参数的实现原理 子路由 子路由之append 动态绑定属性 子路由之append升级版 子路由之非append 路由重定向 手动路由 路由钩子 在路径中去掉"# ...
- blog主题——黑夜
blog主题,存储一下 /* Author: Io_oTI*/ /*Public*/ * { margin: 0; padding: 0; box-sizing: border-box; trans ...
- 学习笔记(25)- NLP的几个概念
NLP的几个概念 从技术研究的角度,简单介绍自然语言处理的几个概念 1. 对抗学习 主要指对抗生成网络. 2个主要构成:判别器.生成器 判别模型尽可能提取特征正确率增加的模型,生成模型尽可能" ...