Leetcode61.旋转链表
链表中的点已经相连,一次旋转操作意味着:
- 先将链表闭合成环
- 找到相应的位置断开这个环,确定新的链表头和链表尾
class Solution{
public:
ListNode* rotateRight(ListNode* head,int k)
{
//判断是否为空或者是不是只有一个结点
if(head==NULL || head->next==NULL) return head;
ListNode* oldTail=head;
int n;//链表长度啊
for(n=;oldTail!=NULL;n++)
oldTail=oldTail->next;
oldTail->next=head;
//寻找新的头结点啦
ListNode* new_tail=head;
k=k%n;//防止循环性移动哈
for(int i=;i<n-k-;i++)
new_tail=new_tail->next;
ListNode* newHead=new_tail->next;
new_tail->next=NULL;
return head;
}
};
复杂度分析
- 时间复杂度:O(N)O(N),其中 NN 是链表中的元素个数
- 空间复杂度:O(1)O(1),因为只需要常数的空间
自己实现的,只不过没考虑到环,但是也差不多这个意思吧
class Solution{
public:
ListNode* rotateRight(ListNode* head,int k)
{
//特殊情况1
if(head==NULL || head->next==NULL) return head;
ListNode* p=head;
ListNode* pre=NULL;
ListNode* lastNode=NULL;
int count_num=;
//统计总数
while(p!=NULL)
{
count_num++;
lastNode=p;
p=p->next;
}
//做处理,防止周期性移动
k=k%count_num;
//特殊情况2
if(k==)
return head;
//p归位
p=head;
for(int i=;i<count_num-k;i++)
{
pre=p;
p=p->next;
}
pre->next=NULL;
lastNode->next=head;
head=lastNode;
return head;
}
};
我这样写就多了个k=0的情况的分析,而形成环之后就不用考虑这个特殊情况,因为永远没有哪个结点的下一个结点是NULL
Leetcode61.旋转链表的更多相关文章
- [Swift]LeetCode61. 旋转链表 | Rotate List
Given a linked list, rotate the list to the right by k places, where k is non-negative. Example 1: I ...
- Leetcode61. Rotate List旋转链表
给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: 1->2->3->4->5->NULL, k = 2 输出: 4-& ...
- [LeetCode] Rotate List 旋转链表
Given a list, rotate the list to the right by k places, where k is non-negative. For example:Given 1 ...
- LeetCode 链表(旋转链表61)
/* * 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. * 构造一个环,对链表进行处理. * *实现原理:先遍历一遍,得出链表长度,注意K可能大于len,之后令k% ...
- LeetCode(61):旋转链表
Medium! 题目描述: 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: 1->2->3->4->5->NULL, ...
- 61. 旋转链表-leetcode
给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: 1->2->3->4->5->NULL, k = 2 输出: 4-& ...
- 【LeetCode题解】61_旋转链表(Rotate-List)
目录 描述 解法:双指针 思路 Java 实现 Python 实现 复杂度分析 描述 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: 1-> ...
- 旋转链表(所有元素往右移) rotate list
[抄题]: 给定一个链表,旋转链表,使得每个节点向右移动k个位置,其中k是一个非负数 样例 给出链表1->2->3->4->5->null和k=2 返回4->5-& ...
- LeetCode:旋转链表【61】
LeetCode:旋转链表[61] 题目描述 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: 1->2->3->4->5- ...
随机推荐
- 【CometOJ】Comet OJ - Contest #8 解题报告
点此进入比赛 \(A\):杀手皇后(点此看题面) 大致题意: 求字典序最小的字符串. 一场比赛总有送分题... #include<bits/stdc++.h> #define Tp tem ...
- SVN版本更新自动通知提醒
当其他用户提交后,如何提示我及时更新代码或版本? 一般情况下,代码的更新时间节点在每天工作开始或有重大功能提交时,所以,不是所有人都对此功能有需求,最好的方式是使用客户端"SVN项目监视器& ...
- 色彩缤纷的Python(改变字体颜色及样式)
色彩缤纷的python(改变字体颜色及样式) 在项目过程中,我们常常会因为输出信息的颜色与样式过于单调以至于让人在视觉上感到很杂乱,所以看下文: 在Linux终端中,使用转义序列来进行如上所述的显示, ...
- ClassLoader.getSystemResourceAsStream("a.txt")获取不到资源文件
一.解决方案 换成XXX.class.getClassLoader().getResourceAsStream("a.txt")即可. 二.场景复现 src/main/resour ...
- CSP-S 2019 题解
D1T1-格雷码 题中给出了构造格雷码的方法. $solve(n,k)$表示求出$2^n$意义下排名为$k$的格雷码, 只要比较一下考虑最高位的0/1取值就好了. 部分分提示了要开$unsigned\ ...
- PHP数学扩展函数BC
需要准确高精度计算的时候,如果直接计算会出现不准确的情况,要用BC函数. bcadd — 2个任意精度数字的加法计算 bccomp — 比较两个任意精度的数字 bcdiv — 2个任意精度的数字除法计 ...
- 本地运行vue项目webpack提示 Compiled successfully
最近在github下载运行别人的vue项目后,如下图提示编译成功,但项目并没有启动 最开始我以为是端口问题,修改了config-index.js里的port端口,重新运行后依然是上图提示 ...
- 区分 JVM 内存结构、 Java 内存模型 以及 Java 对象模型 三个概念
本文由 简悦 SimpRead 转码, 原文地址 https://www.toutiao.com/i6732361325244056072/ 作者:Hollis 来源:公众号Hollis Java 作 ...
- yii2.0的学习之旅(一)
一. 通过composer安装yii2.0项目 *本文是根据您已经安装了composer (1)跳转到项目根目录 cd /xxxx/www (2)下载插件 composer global requir ...
- Spring面试题总结的很全面,附带超详细答案
1.什么是Spring? Spring是一个开源的Java EE开发框架.Spring框架的核心功能可以应用在任何Java应用程序中,但对Java EE平台上的Web应用程序有更好的扩展性.Sprin ...

