题目链接:https://leetcode.com/problems/rotate-list/description/

Example 1:

Input: 1->2->3->4->5->NULL, k = 2
Output: 4->5->1->2->3->NULL
Explanation:
rotate 1 steps to the right: 5->1->2->3->4->NULL
rotate 2 steps to the right: 4->5->1->2->3->NULL

Example 2:

Input: 0->1->2->NULL, k = 4
Output: 2->0->1->NULL
Explanation:
rotate 1 steps to the right: 2->0->1->NULL
rotate 2 steps to the right: 1->2->0->NULL
rotate 3 steps to the right: 0->1->2->NULL
rotate 4 steps to the right: 2->0->1->NULL

思路:

  • 根据题意,给定了一个单链表和一个非负整数k,对链表进行k次旋转操作。每次旋转操作都是将单链表的尾结点插入到当前单链表头结点前的位置。
  • 因为每次旋转操作中的插入操作部分都是要对头结点处进行操作,为了便于节点的插入,我们可以构造一个辅助节点指向链表的头结点。
  • 在每次旋转操作的过程中,我们所需要进行的操作可以分解为2个步骤:
    1. 步骤1为找到单链表的尾结点,此处应用一个结点指针指向尾结点前的节点(因为要改变此结点的指向,让其指向nullptr,该结点变为尾结点);
    2. 步骤1中找到的尾结点,要将其插入到单链表的头结点前,让该结点成为单链表的头结点。
  • 循环执行k次这样的操作即可。

  注意:如果按照上面描述的操作进行编码实现,会出现Time Limit Exceeded的问题。

      想到的可优化的部分是:对k次旋转操作部分进行优化,假设链表结点个数为n,即链表长度为n。

              则旋转操作次数为loop = k % n;

      因为链表进行旋转操作是以链表的长度n为周期的,即我们的旋转操作次数应小于链表的长度n。

      其他可优化的部分可以继续思考。未完待续!!!

      另外也要注意编码过程中的一些小细节,例如当单链表节点个数为1时,上面描述的步骤1可能会有逻辑错误(指针指向错误)。

    

编码如下

 /**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* rotateRight(ListNode* head, int k) {
// 链表为空,则直接返回
if (head == nullptr) return head; int cnt = ; // 统计链表节点个数
ListNode *p = head;
while (p != nullptr)
{
cnt++;
p = p->next;
} int loop = k % cnt; // 要进行旋转的次数 // 辅助节点,永远指向链表的头结点
ListNode *pHead = new ListNode(-);
pHead->next = head; ListNode *pre = nullptr; // 指向待旋转节点的前一个节点
for (int i = ; i < loop; ++i) // 进行旋转操作计数
{
ListNode *pTemp = head;
while (pTemp->next != nullptr)
{
pre = pTemp;
pTemp = pTemp->next;
} if (pre == nullptr) // 注意当链表长度为1时
{
return head;
} pre->next = nullptr; // pre成为指向链表尾结点的尾指针 // 插入查找到的结点到链表的头结点前
pHead->next = pTemp;
pTemp->next = head;
head = pTemp; // head永远指向链表的头结点
} return head;
}
};

061. Rotate List的更多相关文章

  1. Java for LeetCode 061 Rotate List

    Given a list, rotate the list to the right by k places, where k is non-negative. For example: Given ...

  2. 061 Rotate List 旋转链表

    给定一个链表,将链表向右旋转 k 个位置,其中 k 是非负数.示例:给定 1->2->3->4->5->NULL 且 k = 2,返回 4->5->1-> ...

  3. Canvas绘图之平移translate、旋转rotate、缩放scale

    画布操作介绍 画布绘图的环境通过translate(),scale(),rotate(), setTransform()和transform()来改变,它们会对画布的变换矩阵产生影响. 函数 方法 描 ...

  4. [LeetCode] Rotate Array 旋转数组

    Rotate an array of n elements to the right by k steps. For example, with n = 7 and k = 3, the array  ...

  5. [LeetCode] Rotate List 旋转链表

    Given a list, rotate the list to the right by k places, where k is non-negative. For example:Given 1 ...

  6. [LeetCode] Rotate Image 旋转图像

    You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwise). ...

  7. jQuery.rotate.js参数

    CSS3 提供了多种变形效果,比如矩阵变形.位移.缩放.旋转和倾斜等等,让页面更加生动活泼有趣,不再一动不动.然后 IE10 以下版本的浏览器不支持 CSS3 变形,虽然 IE 有私有属性滤镜(fil ...

  8. CSS3属性transform详解之(旋转:rotate,缩放:scale,倾斜:skew,移动:translate)

    CSS3属性transform详解之(旋转:rotate,缩放:scale,倾斜:skew,移动:translate)   在CSS3中,可以利用transform功能来实现文字或图像的旋转.缩放.倾 ...

  9. 偏移:translate ,旋转:rotate,缩放 scale,不知道什么东东:lineCap 实例

    <!DOCTYPE HTML> <head> <meta charset = "utf-8"> <title>canvas</ ...

随机推荐

  1. kotlin字符串和数字之间的转换和人机交互

    继续基础学习~ 字符串和数字之间的转换 那如何转换呢,其实很简单: 编译木有报错,但是运行: 所以这里了解下. 人机交互 看这标题貌似高端的,其实也就是程序可以接受键盘的输入啦,下面开始: 首先提示用 ...

  2. python小练手题1

    1. """ Write a program which can compute the factorial of a given numbers. The result ...

  3. hexo个人博客添加宠物/鼠标点击效果/博客管理

    1.添加宠物 博客宠物模型:https://github.com/xiazeyu/live2d-widget-models 模型对应的动画效果:https://huaji8.top/post/live ...

  4. luogu3720 [AHOI2017初中组]guide[最短路]

    初中组..唉 题意有点误解,当前在x点走一步,gps产生代价条件是沿非x到n的最短路走. 直接倒着跑两遍$i\sim n$的两种最短路,然后枚举每条边走的时候是否可以在两种最短路上,不是就产生1个代价 ...

  5. 帝都之行9day:正式上班第一天

    今天是我正式上班的第一天. 面了两天,三家公司,然后周五就去办入职了,我是不是太随便了点,捂脸. 不管怎么说,又要开始上班啦,CRUD的日子又要开始了…… 加油吧!

  6. vue插件——滚动监听 vue-scrollwatch

    造轮子的目的: 做项目的时候需要一个滚动监听的功能,html结构已经都写好了,不想使用vue组件的方式来写,因为不想改造html结构,于是花了几个小时做了一个简单的,使用vue指令方式来做的,项目上够 ...

  7. hive的事物性 transaction manager

    create table lk3 (id string,nname string,grade int,goldUser int); insert into lk3 values (,, ), (,, ...

  8. 【winfrom-Button】设置带图标样式的Button

    this.myButton.BackColor = System.Drawing.SystemColors.Control; this.myButton.FlatAppearance.BorderCo ...

  9. 【Wince-ListView】Wince中的 ListView怎么显示网格?

    using System.Runtime.InteropServices; using System.Windows.Forms; namespace CETEST { public class Co ...

  10. [人物存档]【AI少女】【捏脸数据】1222今日份的推荐

    AISChaF_20191030183624290.png