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- ...
随机推荐
- STA 开篇
时序分析=动态时序分析+静态时序分析 动态时序分析简单讲就是gate-level simulation,仿真对象是netlist+sdf,通过SDF反标,得到gate跟net的delay,通过输入大量 ...
- Vue - 动态组件 & 异步组件
动态组件 <div id="app"> <components :is="com[2]"></components> < ...
- P2023 [AHOI2009]维护序列 区间加乘模板
题意: 有长为N的数列,不妨设为a1,a2,…,aN .有如下三种操作形式:N<=1e5(1)把数列中的一段数全部乘一个值;(2)把数列中的一段数全部加一个值;(3)询问数列中的一段数的和,由于 ...
- idea中的springboot+gradle项目报错springboot configuration annotation processor not found in classpath
idea中的springboot项目,打开某个类run.halo.app.config.properties.HaloProperties.java,报错(使用gradle编译): springboo ...
- 2019冬季PAT甲级第四题
#define HAVE_STRUCT_TIMESPEC #include<bits/stdc++.h> using namespace std; typedef struct node{ ...
- 【Vue路由系统详述】
目录 路由命名 路由参数 路由参数的实现原理 子路由 子路由之append 动态绑定属性 子路由之append升级版 子路由之非append 路由重定向 手动路由 路由钩子 在路径中去掉"# ...
- 68 for循环2 for循环最简单的用法
#include <stdio.h> int main (void) { int i ; ; ; i<; i+=) //i+=2 等价于 i= i+2: { sum = sum + ...
- win api 音频可视化
暂时记录,改天有时间再完善...其实写好好久了,但以前的代码丢了,重新写一遍.. 原理和 python 的一样,获取输入设备,然后把数据读取到 buffer 中,在绘制出来. 这里要注意两点: 1. ...
- Redis注册成服务
注册服务 redis-server.exe –-service-install redis.windows.conf 删除服务 redis-server –-service-uninstall 开启服 ...
- TOMCAT中文信息乱码改为GBK
# Licensed to the Apache Software Foundation (ASF) under one or more# contributor license agreements ...