题目考察的知识点:
- 单链表的操作
- 数学计算
题目解答方法的文字分析:
该题要求将链表中的牛向右移动k个位置。为了避免重复移动,可以先计算出链表的长度n,并计算出实际需要移动的步数为k%n(n取决于链表的长度)。然后,将链表首尾相连,形成一个循环链表。再根据计算得到的步数,从头开始遍历链表,找到新链表的尾部,将其指向null即可。
本题解析所用的编程语言:Java
完整且正确的编程代码:
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;
}
}

京公网安备 11010502036488号