IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> LeetCode每日一题题解:61. 旋转链表-题解-python && C++源代码 -> 正文阅读

[数据结构与算法]LeetCode每日一题题解:61. 旋转链表-题解-python && C++源代码

61. 旋转链表

难度中等730收藏分享切换为英文接收动态反馈

给你一个链表的头节点?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

解题思路:将链表首尾结成环,然后找到新数组的最后一个元素再断开

Python代码:

class Solution:
    def rotateRight(self, head: ListNode, k: int) -> ListNode:
        if k == 0 or not head or not head.next:#如果 k =0 或者 列表是空列表 或者 列表只有一个数 直接输出列表的值 ,不变
            return head
        n = 1     #n=1 用来求总长度
        ads = head
        while ads.next:  #求出链表的长度
              ads = ads.next
              n += 1
        if (a := n-k%n) == n:  #新链表的最后一个节点(即原链表的第 (n - 1) - (k \bmod n)(n?1)?(kmodn) 个节点,因
            return head
  
        ads.next = head  #因此我们需要接成旋转链表的时候 ,需要再在这里接入

        while a:
            ads = ads.next       #寻找应该断开的地方
            a -= 1
        ret = ads.next
        ads.next = None  #断开
        return ret












C++代码:

/**
 * 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 (k == 0 || head == nullptr || head->next == nullptr){//
            return head;
        }
        //当链表长度不大于 11,或者 kk 为 nn 的倍数时,新链表将与原链表相同,我们无需进行任何处理
        int n = 1;  //定义一个n值,用来存放求得的链表的长度
        ListNode*ads = head;  //定义一个ads 用来存放我们之后要形成环的链表
        while(ads->next != nullptr){   //如果ads的下一个不为空,就一直进行while 求得链表的长度
            ads = ads->next;
            n++;
        }
        int a = n-k%n;// 求得们找到新链表的最后一个节点(即原链表的第 (n?1)?(kmodn) 个节点  下一个为要断开的地方 所以这里为 n-k%n
        if (a == n){  //当链表长度为n的倍数的时候,我们直接输出原链表
            return head;   
        }
        ads->next = head;  //将链表结成环
        while (a != 0){
            ads = ads->next;  //找到需要断开的地方
            a -= 1;
        }
        ListNode*dio = ads->next;
        ads->next = nullptr; //断开

        return dio;

    }
};

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-03-10 22:50:47  更:2022-03-10 22:51:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 13:39:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码