题解 | #牛群旋转#

牛群旋转

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
        if (head == null || head.next == null || k == 0) return head;
        int size = 1;
        ListNode cur = head;
        while (cur.next != null) {
            cur = cur.next;
            size++;
        }
        cur.next = head;
        k = size - k % size;
        while (k-- > 0) cur = cur.next;
        head = cur.next;
        cur.next = null;
        return head;
    }
}
  • 基本思路:将链表头尾相连,然后找到指定的位置断开即可。
  • 实现:
  • 边界值特殊处理:如果链表为null、或只有一个节点、或 k = 0,则无需操作,直接返回
  • 定义一个 cur 指针遍历到原链表的尾节点,同时记录链表长度 size
  • 链表首尾相连,即 cur.next = head
  • 对 k 处理:右移 k 位,对应成环后的是右移 size - k % size 位
  • 利用 cur 循环右移 k 位
  • 循环结束后,cur.next 即为新链表的头节点,将其赋值给 head,然后断开 cur.next = null
  • 返回 head
#链表#
线性表基础 文章被收录于专栏

链表、递归、栈

全部评论

相关推荐

2024-12-26 13:00
太原理工大学 Java
会飞的猿:简历没啥大问题啊,感觉是缺少了实习经历。多投投先找个中小厂过渡一下吧
点赞 评论 收藏
分享
02-05 08:18
四川大学 Java
在思考的熊熊很讨厌吃香菜:不是,我门头沟学院呢?这都没排上?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务