返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++实现旋转链表
  • 474
分享到

C++实现旋转链表

2023-06-20 16:06:28 474人浏览 泡泡鱼
摘要

这篇文章主要介绍“c++实现旋转链表”,在日常操作中,相信很多人在C++实现旋转链表问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++实现旋转链表”的疑惑有所帮助!接下来,请跟着小编一起来学习吧![Leet

这篇文章主要介绍“c++实现旋转链表”,在日常操作中,相信很多人在C++实现旋转链表问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++实现旋转链表”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

[LeetCode] 61. Rotate List 旋转链表

Given the head of a linked list, rotate the list to the right by k places.

Example 1:

C++实现旋转链表

Input: head = [1,2,3,4,5], k = 2
Output: [4,5,1,2,3]

Example 2:

C++实现旋转链表

Input: head = [0,1,2], k = 4
Output: [2,0,1]

Constraints:

  • The number of nodes in the list is in the range [0, 500].

  • -100 <= Node.val <= 100

  • 0 <= k <= 2 * 109

这道旋转链表的题和之前那道 Rotate Array 很类似,但是比那道要难一些,因为链表的值不能通过下表来访问,只能一个一个的走,博主刚开始拿到这题首先想到的就是用快慢指针来解,快指针先走k步,然后两个指针一起走,当快指针走到末尾时,慢指针的下一个位置是新的顺序的头结点,这样就可以旋转链表了,自信满满的写完程序,放到 OJ 上跑,以为能一次通过,结果跪在了各种特殊情况,首先一个就是当原链表为空时,直接返回NULL,还有就是当k大于链表长度和k远远大于链表长度时该如何处理,需要首先遍历一遍原链表得到链表长度n,然后k对n取余,这样k肯定小于n,就可以用上面的算法了,代码如下:

 解法一:

class Solution {public:    ListNode *rotateRight(ListNode *head, int k) {        if (!head) return NULL;        int n = 0;        ListNode *cur = head;        while (cur) {            ++n;            cur = cur->next;        }        k %= n;        ListNode *fast = head, *slow = head;        for (int i = 0; i < k; ++i) {            if (fast) fast = fast->next;        }        if (!fast) return head;        while (fast->next) {            fast = fast->next;            slow = slow->next;        }        fast->next = head;        fast = slow->next;        slow->next = NULL;        return fast;    }};

这道题还有一种解法,跟上面的方法类似,但是不用快慢指针,一个指针就够了,原理是先遍历整个链表获得链表长度n,然后此时把链表头和尾链接起来,在往后走 n - k%n 个节点就到达新链表的头结点前一个点,这时断开链表即可,代码如下:

class Solution {public:    ListNode *rotateRight(ListNode *head, int k) {        if (!head) return NULL;        int n = 1;        ListNode *cur = head;        while (cur->next) {            ++n;            cur = cur->next;        }        cur->next = head;        int m = n - k % n;        for (int i = 0; i < m; ++i) {            cur = cur->next;        }        ListNode *newhead = cur->next;        cur->next = NULL;        return newhead;    }};

到此,关于“C++实现旋转链表”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: C++实现旋转链表

本文链接: https://lsjlt.com/news/298207.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C++实现旋转链表
    这篇文章主要介绍“C++实现旋转链表”,在日常操作中,相信很多人在C++实现旋转链表问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++实现旋转链表”的疑惑有所帮助!接下来,请跟着小编一起来学习吧![Leet...
    99+
    2023-06-20
  • C++实现LeetCode(61.旋转链表)
    [LeetCode] 61. Rotate List 旋转链表 Given the head of a linked list, rotate the ...
    99+
    2024-04-02
  • C++怎么旋转链表
    这篇文章主要介绍“C++怎么旋转链表”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C++怎么旋转链表”文章能帮助大家解决问题。Rotate List 旋转链表Given the head&...
    99+
    2023-06-19
  • Python 数据结构之旋转链表
    题目描述:给定一个链表,旋转链表,使得每个节点向右移动k个位置,其中k是一个非负数 样例:给出链表1->2->3->4->5->null和k=2;返回4->5->...
    99+
    2022-06-04
    数据结构 链表 Python
  • C++实现LeetCode(48.旋转图像)
    [LeetCode] 48. Rotate Image 旋转图像 You are given an n x n 2D matrix repre...
    99+
    2024-04-02
  • C++实现LeetCode(189.旋转数组)
    [LeetCode] 189. Rotate Array 旋转数组 Given an array, rotate the array to the right by k&#...
    99+
    2024-04-02
  • C++怎么实现旋转数组
    本篇内容主要讲解“C++怎么实现旋转数组”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++怎么实现旋转数组”吧!Rotate Array 旋转数组Given an array, rotate ...
    99+
    2023-06-20
  • C++实现反转链表的两种方法
    目录一.使用vector容器二.调整指针法大家好,今天和大家分享的是反转链表的两种方法,第一种是用泛型编程里面的STL,第二种是利用多个指针进行操作,小孩子才做选择,建议两个都学。我...
    99+
    2023-02-09
    C++ 反转链表
  • go实现反转链表
    反转链表首先讨论特殊节点 如果节点在首位,则反转之后,首位节点的next值为nil。 func reverse(head *ListNode) *ListNode ...
    99+
    2022-06-07
    GO 反转 链表
  • java实现链表反转
    本文为大家分享了java实现链表反转的具体代码,供大家参考,具体内容如下 算法题:实现链表的反转 提供了2种方法,迭代法、递归法。 (为了方便输出可视化,在自定义的ListNode中...
    99+
    2024-04-02
  • C++实现旋转图像的方法
    这篇文章主要讲解了“C++实现旋转图像的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++实现旋转图像的方法”吧!Rotate Image 旋转图像You are given an&n...
    99+
    2023-06-20
  • C++相交链表和反转链表详解
    目录给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。思路给你单链表的头节点 head ,请你反转...
    99+
    2024-04-02
  • C++实现LeetCode(25.每k个一组翻转链表)
    [LeetCode] 25. Reverse Nodes in k-Group 每k个一组翻转链表 Given a linked list, reverse the nodes of...
    99+
    2024-04-02
  • C++怎么实现每k个一组翻转链表
    本篇内容主要讲解“C++怎么实现每k个一组翻转链表”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++怎么实现每k个一组翻转链表”吧!Reverse Nodes in k-Group 每k个一组...
    99+
    2023-06-20
  • C++如何实现单链表
    小编给大家分享一下C++如何实现单链表,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!单链表的实现(从入门到熟练)概念和结构概念:链表是一种物理存储结构上非连续、非...
    99+
    2023-06-29
  • C++怎么实现单链表
    本文小编为大家详细介绍“C++怎么实现单链表”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++怎么实现单链表”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。单链表链表内存空间不一定连续,其扩展性较好。多余的不多...
    99+
    2023-07-02
  • Java 实现反转一个链表
    文章目录 思路核心四步骤循环移动代码实现 思路 翻转指的是改变链表中结点的指向,而不是将它的数据反转。 上图展示出的就是一个反转前的链表,下图展示一个反转后的链表。 根据上图可以...
    99+
    2023-10-04
    链表 java 数据结构 intellij-idea 编程题
  • golang链表反转如何实现
    要实现golang链表的反转,可以采用迭代的方式或者递归的方式。 迭代方式的代码如下: type ListNode struct {...
    99+
    2023-10-26
    golang
  • C++ OpenGL实现旋转立方体的绘制
    目录1、Z-缓冲2、GLM库函数3、PVM矩阵4、PVM矩阵的使用5、工程文件结构shader.hshader.cppmain.cpp 1、Z-缓冲 //开启深度测试 ...
    99+
    2024-04-02
  • C++ 实现L2-002 链表去重
    给定一个带整数键值的链表 L,你需要把其中绝对值重复的键值结点删掉。即对每个键值 K,只有第一个绝对值等于 K 的结点被保留。同时,所有被删除的结点须被保存在另一个链表上。例如给定 ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作