力扣面试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;//建议画图理解
    }
}
相关推荐
哈里谢顿8 小时前
1000台裸金属并发创建中的重难点问题分析
面试
哈里谢顿8 小时前
20260303面试总结(全栈)
面试
over69713 小时前
从 LLM 到全栈 Agent:MCP 协议 × RAG 技术如何重构 AI 的“做事能力”
面试·llm·mcp
SuperEugene15 小时前
Vue状态管理扫盲篇:如何设计一个合理的全局状态树 | 用户、权限、字典、布局配置
前端·vue.js·面试
Sailing16 小时前
🚀 别再乱写 16px 了!CSS 单位体系已经进入“计算时代”,真正的响应式布局
前端·css·面试
SuperEugene19 小时前
Vue状态管理扫盲篇:Vuex 到 Pinia | 为什么大家都在迁移?核心用法对比
前端·vue.js·面试
Hilaku19 小时前
我会如何考核一个在简历里大谈 AI 提效的高级前端?
前端·javascript·面试
前端Hardy20 小时前
别再用 $emit 满天飞了!Vue 3 组件通信的 4 种正确姿势,第 3 种 90% 的人不知道
前端·vue.js·面试
我叫黑大帅20 小时前
前端如何利用 GitHub Actions 自动构建并发布到 GitHub Pages?
前端·面试·github
我叫黑大帅20 小时前
前端总说的防抖与节流到底是什么?
前端·javascript·面试