题目考察的知识点:
- 单链表的操作
- 数学计算
题目解答方法的文字分析:
该题要求将链表中的牛向右移动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; } }