LeetCode 刷题【61. 旋转链表】

61. 旋转链表

自己做

解:截取拼接

cpp 复制代码
/**
 * 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) {
        ListNode *p = head, *q = head, *r = head;
        int l = 0;                          //链表长

        if(head == nullptr || head->next == nullptr)                 //没有移动空间
            return head;

        while(p != nullptr){                //计算链表长
            p = p -> next;
            l++;
        }
        p = head;                           //归位p

        //调整k
        k %= l;

        if(k == 0)                          //为0则不移动
            return head;

        for(int i = 0; i < k; i++)          //q、r包含k个元素
            r = r->next;

        if(k > 0)
            q = p->next;

        while(r->next != nullptr){        //使r指向尾部
            p = q;
            r = r->next;
            q = q->next;
        }

        p->next = nullptr;
        r->next = head;

        return q;

    }
};
相关推荐
灵感__idea5 小时前
Hello 算法:贪心的世界
前端·javascript·算法
ZK_H7 小时前
嵌入式c语言——关键字其6
c语言·开发语言·计算机网络·面试·职场和发展
澈2077 小时前
深入浅出C++滑动窗口算法:原理、实现与实战应用详解
数据结构·c++·算法
ambition202427 小时前
从暴力搜索到理论最优:一道任务调度问题的完整算法演进历程
c语言·数据结构·c++·算法·贪心算法·深度优先
cmpxr_7 小时前
【C】原码和补码以及环形坐标取模算法
c语言·开发语言·算法
qiqsevenqiqiqiqi7 小时前
前缀和差分
算法·图论
代码旅人ing7 小时前
链表算法刷题指南
数据结构·算法·链表
Yungoal7 小时前
常见 时间复杂度计算
c++·算法
6Hzlia8 小时前
【Hot 100 刷题计划】 LeetCode 48. 旋转图像 | C++ 矩阵变换题解
c++·leetcode·矩阵
不爱吃炸鸡柳8 小时前
单链表专题(完整代码版)
数据结构·算法·链表