力扣面试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;//建议画图理解
    }
}
相关推荐
水蓝烟雨4 分钟前
1931. 用三种不同颜色为网格涂色
算法·leetcode
leoufung2 小时前
LeetCode 76:Minimum Window Substring 题解与滑动窗口思维详解
算法·leetcode·职场和发展
风筝在晴天搁浅3 小时前
LeetCode 92.反转链表Ⅱ
算法·leetcode·链表
weisian1513 小时前
基础篇--概念原理-2-参数是什么?——从原理到实战,一篇讲透
面试·职场和发展·模型参数·7b和70b·参数=规则,不是原始数据
WL_Aurora4 小时前
Python 算法基础篇之链表
python·算法·链表
AI人工智能+电脑小能手4 小时前
【大白话说Java面试题】【Java基础篇】第26题:Java的抽象类和接口有哪些区别
java·开发语言·面试
逻辑驱动的ken7 小时前
Java高频面试考点场景题20
java·开发语言·深度学习·面试·职场和发展
Wect7 小时前
深度剖析浏览器跨域问题
前端·面试·浏览器
普贤莲花7 小时前
【2026年第18周---写于20260501】---舍得
程序人生·算法·leetcode
m0_629494737 小时前
LeetCode 热题 100-----16.除了自身以外数组的乘积
数据结构·算法·leetcode