当前位置: 首页 > article >正文

LeetCode 61. 旋转链表

题目描述


分析

grq:关于链表结点的修改顺序:改前先用,用后就改。
将每个结点向右移动k个位置,实际上就是将后k个结点连接到头部。这道题目是不需要dummy结点的。整体分析如下:
在这里插入图片描述

首先要获得整个链表也是后k个结点的尾结点。由于整个是n个结点,除掉后k个结点后还有n-k个结点,要修改指针首先要跳到倒数第k+1个结点(正数第n-k个结点),从第一个结点跳n-k-1次就可以到达。之后就是指针的修改:

  • 尾结点指向头结点
  • 倒数第k个变为新的头结点
  • 倒数第k+1(正数第n-k)个结点变为尾结点指向null,

代码(Java)
class Solution {
    public ListNode rotateRight(ListNode head, int k) {
        if (head == null) return head;
        ListNode tail = head;
        // 先求出链表长度
        int n = 1;
        while (tail.next != null) {
            n ++;
            tail = tail.next;
        }

        k %= n;
        if (k == 0) return head;

        ListNode cur = head;
        // 倒数第k+1个结点成了尾结点
        for (int i = 0; i < n - k - 1; i ++) cur = cur.next;
        
        tail.next = head;
        head = cur.next;
        cur.next = null;
        return head;
    }
}

http://www.kler.cn/a/299908.html

相关文章:

  • openeuler-无法dnf安装包问题
  • electron: 将网址打包成exe桌面应用
  • Android Dialog:Dialog和DialogFragment的区别?DialogFragment如何使用?源码解析
  • 解锁10款超棒的图表制作软件,让数据可视化不再困难
  • leetcode 994.腐烂的橘子
  • Django-Celery-Flower实现异步和定时爬虫及其监控邮件告警
  • 【HCIA-Datacom】数据通信网络基础
  • CSS“多列布局”(补充)——WEB开发系列35
  • 网络层 VII(IP多播、移动IP)【★★★★★★】
  • 【C++】——string
  • 揭开面纱--机器学习
  • Ubuntu创建一个虚拟摄像头
  • 【区块链 + 基层治理】链动社区:基于 FISCO BCOS 的智慧社区数字化治理平台 | FISCO BCOS应用案例
  • QQ频道机器人零基础开发详解(基于QQ官方机器人文档)[第二期]
  • Java System.getenv 和 System.getProperty 区别
  • DAY74
  • 【笔记】扩散模型(七):Latent Diffusion Models(Stable Diffusion)论文解读与代码实现
  • Flutter 中的低功耗蓝牙概述
  • 连锁管理系统如何兼批发和零售 连锁收银系统如何配合做好财务
  • C++之函数的分文件编写