力扣面试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;//建议画图理解
    }
}
相关推荐
Swift社区8 分钟前
LeetCode 378 有序矩阵中第 K 小的元素
算法·leetcode·矩阵
sin_hielo27 分钟前
leetcode 1292(二维前缀和)
数据结构·算法·leetcode
橘颂TA35 分钟前
【剑斩OFFER】算法的暴力美学——力扣 695 题:岛屿的最大面积
算法·leetcode·职场和发展
Remember_99337 分钟前
Java 入门指南:从零开始掌握核心语法与编程思想
java·c语言·开发语言·ide·python·leetcode·eclipse
石去皿38 分钟前
机器学习面试·易错速问速答 30 题
人工智能·机器学习·面试
石去皿40 分钟前
深度学习面试高频问题和答复
人工智能·深度学习·面试
a程序小傲40 分钟前
哈罗Java面试被问:布隆过滤器的误判率和哈希函数选择
java·服务器·算法·面试·职场和发展·哈希算法
填满你的记忆44 分钟前
【从零开始——Redis 进化日志|Day6】缓存的三剑客:穿透、击穿、雪崩,到底怎么防?(附生产级代码实战)
java·数据库·redis·缓存·面试
客卿1231 小时前
力扣--数组 入门三题-485/283/27---刷题笔记+思路分析+C语言
c语言·笔记·leetcode
AlenTech1 小时前
148. 排序链表 - 力扣(LeetCode)
数据结构·leetcode·链表