题解 | #牛群旋转#

牛群旋转

https://www.nowcoder.com/practice/5137e606573843e5bf4d8ea0d8ade7f4

import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 *   public ListNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param head ListNode类 
     * @param k int整型 
     * @return ListNode类
     */
    public ListNode rotateLeft (ListNode head, int k) {
        // write code here  整体思路就是:将倒数k%size个节点移动到头部
        // 1. 处理特殊情况
        if (head == null || head.next == null || k <= 0) return head;

        // 2. 计算链表长度:如果k>链表长度需要进行处理
        int size = 0;
        ListNode cur = head;
        while (cur != null) {
            size++;
            cur = cur.next;
        }
        k = k % size;

        // 34.快慢指针找到倒数k+1个节点位置
        ListNode fast = head;
        ListNode slow = head;
        while (k-- != 0) {
            fast = fast.next;
            if (fast == null) return head;
        }

        while (fast != null && fast.next != null) {
            fast = fast.next;
            slow = slow.next;
        }

        // 5. 此时slow就是倒数k+1个节点位置,fast就是尾节点的位置
        ListNode h = head; 
        head = slow.next;  // 将头节点指向新的头部
        slow.next = null;  // 将新的尾节点的next置空
        fast.next = h;     // 最后将旧的尾节点接到旧的头节点
        

        return head;

    }
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-10 15:58
投个小米提前批试试水,先投一个岗位看看形势,不行就再沉淀一下投第二个岗位,莫辜负
Java抽象带篮子:我嘞个骚刚,已经开始研发6g了吗
投递小米集团等公司7个岗位
点赞 评论 收藏
分享
仁者伍敌:牛子这些人还会点一个自动回复,boss都不带回复的
点赞 评论 收藏
分享
05-20 21:57
已编辑
门头沟学院 Java
喜欢吃卤蛋的悲伤蛙在...:建信融通没消息吧,我2说有实习挂简历不理了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务