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- ...
随机推荐
- codeforces Make The Fence Great Again(dp)
题目链接:http://codeforces.com/contest/1221/problem/D 题目要求ai ! = ai-1,草纸上推理一下可以发现每一个栅栏可以升高的高度无非就是 +0,+1, ...
- SQL查询语句的执行
执行过程 连接器 - 管理连接,权限验证 查询缓存 - 命中缓存直接返回结果 分析器 - 词法分析 ,语法分析 优化器 - 分析执行计划,选择最优的执行计划 执行器 - 操作存储引擎接口,返回结果 不 ...
- PyCharm中的django项目的引入
1.从github或者从本地的文件打开项目 2.项目引入后,python manage.py runserver 8080启动 1.启动的时候有错误,看看要引入的模块错误,然后把模块引入 D:\.St ...
- UNICODE编码UTF-16 中的Endian(FE FF) 和 Little Endian(FF FE)
从网上找到的两篇不错的文章,由于被网上多处转载,所以不知道源处,未能注明出处,希望作者见谅,如有意见请发信给我,谢谢! 第一篇很清晰. 介绍Unicode之前,首先要讲解一些基础知识.虽然跟Unico ...
- 优化 : Oracle数据库Where条件执行顺序 及Where子句的条件顺序对性能的影响
.Oracle数据库Where条件执行顺序: 由于SQL优化起来比较复杂,并且还会受环境限制,在开发过程中,写SQL必须必须要遵循以下几点的原则: 1.ORACLE采用自下而上的顺序解析WHERE子句 ...
- oracle11g UNDO使用率高,且unexpire过高
1.查看使用率: col USED_PER for a60 SELECT A.TABLESPACE_NAME AS TABLESPACE_NAME, ,) AS TOTAL_GB, ,) AS FRE ...
- 【应急响应】Tomcat安全加固
一.删除或选定无效账号 二.密码复杂度 三.启用日志记录功能 四.登录超时 五.Tomcat错误页面重定向 六.禁止Tomcat目录列表显示文件
- ioutils
import yaml import json import csv import configparser class IoUtils(object): """ dep ...
- php 基础 二维数组以某个重复值累加
$arr = array( array('id' => 123, 'name' => '张三', 'amount'=>'1'), array('id' => 123, 'nam ...
- Mac上通过docker配置PHP开发环境
这篇文章介绍的内容是关于Mac上通过docker配置PHP开发环境,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 更多PHP相关知识请关注我的专栏PHPzhuanlan.zhihu. ...