题解 | #牛群旋转#

牛群旋转

https://www.nowcoder.com/practice/5137e606573843e5bf4d8ea0d8ade7f4?tpId=354&tqId=10591410&ru=/exam/oj&qru=/ta/interview-202-top/question-ranking&sourceUrl=%2Fexam%2Foj

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) {
        if(k==0||head==null||head.next==null){
            return head;
        }
        int n =1;
       ListNode iter = head;
        while (iter.next != null) {
            iter = iter.next;
            n++;
        }
        int add = n - k % n;
        if (add == n) {
            return head;
        }
        iter.next = head;
        while (add-- > 0) {
            iter = iter.next;
        }
       ListNode ret = iter.next;
        iter.next = null;
        return ret;
    }
}

本题知识点分析:

1.链表遍历和取值

2.前驱节点和后继结点

3.虚拟头结点

4.数学模拟

本题解题思路分析:

1.{1,2,3,4,5,6,7,8,9},3 -->{7,8,9,1,2,3,4,5,6} 首先这题解题思路是什么?其实是找到6和7的中间这个点

2.只要6.next= null,7当做第一个结点那么就完成了

3.而这个点,需要进行计算, int add = n - k % n; 9-3%9 = 6;

4.先计算链表长度

5.然后使整个链表为环形链表

6.根据add去找到这个关键点

7. ListNode ret = iter.next; 这时候ret为7,而iter为6的地址,用临时变量保存7的地址,又因为是环形链表因此已经形成 -> {7,8,9,1,2,3,4,5,6},最终让节点的值为6的地址赋值为null

本题使用编程语言: JAVA

如果本篇文章对您有帮助的话,可以点个赞支持一下,感谢~

高频面试算法题解 文章被收录于专栏

高频面试算法题解,每天一小步,人生一大步,跟着一起刷起来!

全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

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