首页 > 其他分享 >61. 旋转链表

61. 旋转链表

时间:2022-09-01 00:01:14浏览次数:72  
标签:head ListNode val int next 链表 61 旋转

61. 旋转链表

给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。

 

示例 1:

输入:head = [1,2,3,4,5], k = 2
输出:[4,5,1,2,3]

示例 2:

输入:head = [0,1,2], k = 4
输出:[2,0,1]

 

提示:

  • 链表中节点的数目在范围 [0, 500]
  • -100 <= Node.val <= 100
  • 0 <= k <= 2 * 109

 

解析:

O(n)

就是先统计有多少结点n

k取模一下n

找到倒数第k个结点的前驱即可

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* rotateRight(ListNode* head, int k) {
        if(head == nullptr) return head;
        int n = 0;
        ListNode* p = head;
        while(p)
        {
            n++;
            p = p->next;
        }
        k %= n;
        if(k == 0) return head;
        int cnt = 0;
        p = head;
        ListNode *q = head;
        while(q->next)
        {
            if(cnt == k)
            {
                p = p->next;
            }
            else cnt++;
            q = q->next;

        }
        ListNode *x = p->next;
        p->next = nullptr;
        q->next = head;
        head = x;
        return head;

    }
};

 

标签:head,ListNode,val,int,next,链表,61,旋转
From: https://www.cnblogs.com/WTSRUVF/p/16645003.html

相关文章

  • 前端也该刷点算法题——双指针解“链表”题也太香了叭!
    双指针解“链表”题也太香了叭!同步双指针1查找链表中倒数第k个节点剑指Offer22.链表中倒数第k个节点思路:假设链表的长度为n,不难得出倒数第k个节点即为整数第n+......
  • leetcode 1019. 链表中的下一个更大节点 js实现
    给定一个长度为 n 的链表 head对于列表中的每个节点,查找下一个更大节点的值。也就是说,对于每个节点,找到它旁边的第一个节点的值,这个节点的值严格大于它的值。返回......
  • CCF 201503-1 图像旋转(C++)
    好像旋转矩阵有更好的做法,但是我觉得这样也足够了,如果需要更好的做法,大家得自己在去找一下。我主要是找了下规律,然后做出来的#include<iostream>#include<bits/stdc+......
  • NowCoder BM1 反转链表
    描述给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。NowCoderBM1反转链表importjava.util.*;/*public......
  • mysql安装及10061错误解决
    mysql出现10061错误解决方法 1.开始菜单->运行(cmd)->寻径到MySQL文件中的bin目录下如:D:\MySQL\mysql-5.6.24-win32\bin2.输入指令:mysqld--skip-grant-tables 回车//......
  • Javascript中的链表
    Javascript中的链表数据结构的介绍文章。链表概念与应用于Javascript语言的实际示例。介绍数据结构是一种有效处理大量数据的手段,了解它的结构和组成为我们提供了更......
  • 数据结构之链表的原理
    链表:在计算机中用一组任意的存储单元存储线性表的数据元素称为链式存储结构,这组存储结构可以是连续的,也可以是不连续的,因此在存储数据元素时可以动态分配内存。注:在java中......
  • 从零构建链表
    最重要的头节点是这样创建的:        Node*Head=newNode;//头节点不存储数据        Head->next=NULL;        Node*pre=Head......
  • 83. 删除排序链表中的重复元素
    83.删除排序链表中的重复元素#由于是已排序的链表,判断前后是否为相同元素如果是则连接下下个不是则向前移动#code:#Definitionforsingly-linkedlist.#classLis......
  • MathProblem 61 Coin toss problem #3
    Supposeyouhaveacoininwhichtheprobabilityofflippingaheadsis\(p\),where\(p\ge0.5\).Whatistheexpectednumberofflipsitwilltakeforthenu......