力扣面试150题--旋转链表

Day 38

题目描述

思路

java 复制代码
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode rotateRight(ListNode head, int k) {
        if(head==null){//处理空链表
            return null;
        }
         ListNode fakehead=new ListNode();
        fakehead.next=head;//空头结点
        ListNode z=fakehead;
        ListNode x=head;
        int len=1;
        while(x.next!=null){//找到链表长度
            x=x.next;
            len++;
        }
        k=k%len;//防止k大于len
        if(k==0){//说明k被除尽了 不需要处理
            return head;
        }
        ListNode y=head;
        x=head;
        int i=1;
        while(i!=k){
            y=y.next;
            i++;
        }
        while(y.next!=null){
            z=z.next;
            x=x.next;
            y=y.next;
        }//以上代码复用了找到倒数第k个元素,z为倒数第k+1的元素
        //x为倒数第k个元素
        z.next=null;//此时旋转,k为最后一个,指向null
        y.next=fakehead.next;//结尾变为空头指针的后一个
        fakehead.next=x;//空头指针指向倒数第k个元素
        return fakehead.next;//建议画图理解
    }
}
相关推荐
时间的拾荒人6 小时前
Qt 信号与槽机制详解(二):连接方式详解与面试指南
开发语言·qt·面试
alphaTao7 小时前
LeetCode 每日一题 2026/9/21-2026/9/27
python·算法·leetcode
我叫黑大帅18 小时前
Go日志库工程选型与逃逸分析评测报告
后端·面试·go
Persistent的粽子!20 小时前
双指针算法:最大盛水容器
c++·算法·leetcode
此时不提桶,更待何时20 小时前
05-05-B-对象存储与文件服务面试与生产事故实战
面试·nosql
Chen—LSN21 小时前
C语言——⽂件操作(1)
c语言·开发语言·c++·经验分享·笔记·算法·链表
晚安日记wanna21 小时前
大厂禁 JOIN 的真正原因,拆到第四层才清楚
数据库·后端·面试
多喝水身体棒1 天前
Spring Boot 自动配置原理,看完终于不慌了
面试·程序员
丑陋小蚊子1 天前
有作品集的岗位,简历和作品各写什么?
面试·求职招聘·大学生·简历·简历下载
多多爱学习1 天前
括号有几层?得看还有多少个左括号没闭合
c语言·c++·算法·面试