• 【手绘漫画】图解LeetCode之旋转链表(LeetCode 61题)


    在这里插入图片描述

    图解LeetCode刷题计划

    1、写在前面

    手绘漫画系列正式上线!!!“图解LeetCode刷题计划” 来了!!!

    今天是第十八期,争取每天一期,最多两天一期,欢迎大家监督我。。。
    在这里插入图片描述
    最近一段时间,依旧是链表~

    我就是个鸽子。。。
    在这里插入图片描述

    2、题目

    首先看一下题目,
    在这里插入图片描述
    找到我们的旋转点,然后旋转,是不是想起了之前做过的二分旋转,哈哈

    好了,废话少说,开始了。
    在这里插入图片描述
    在这里插入图片描述

    3、正文

    好了,来一起看一下。

    依旧还是双指针,这种有间隔的链表,大多数都是双指针。

    先让快指针走 k 个位置,然后两个指针一起走完整个链表。
    在这里插入图片描述
    这时,两个指针之间的区域就是我们要移动的区域,只要更改指针指向,就完事了。

    • 即,first->next 指向 head,完成旋转(当然还没完事);
    • head 指向 second->next,头结点指向确认;
    • second->next 指向空节点,尾结点指向确认;
    • 打完收工。

    在这里插入图片描述
    记得返回头结点。
    在这里插入图片描述

    4、代码

    /**
     * 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) return NULL;
            int n=0;
            for(auto p=head;p;p=p->next) n++;
            k%=n;
            auto first=head,second=head;
            while(k--){
                first=first->next;
            }
            while(first->next){
                first=first->next;
                second=second->next;
            }
            first->next=head;
            head=second->next;
            second->next=NULL;
            return head;
        }
    };
    

    在这里插入图片描述
    在这里插入图片描述

    如果有幸帮到你,请帮我点个【赞】,给个【关注】!如果能顺带【评论】给个鼓励,我将不胜感激。

    如果想要更多的资源,欢迎关注 @我是管小亮,文字强迫症MAX~

  • 相关阅读:
    词频统计
    第二周每周例行报告
    事务管理(ACID)
    Redis
    jar包和war包的区别
    CSS实现Loading加载动画
    如何实现“返回顶部”的页面效果
    PHP页面跳转-常见方法
    局域网络调试方式
    Thinkphp 统计数据库字段总值
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13302558.html
Copyright © 2020-2023  润新知