import java.util.*; /* * public class ListNode { * int val; * ListNode next = null; * public ListNode(int val) { * this.val = val; * } * } */ /** * NC211 旋转链表 * @author d3y1 */ public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param head ListNode类 * @param k int整型 * @return ListNode类 */ public ListNode rotateLinkedList (ListNode head, int k) { return solution1(head, k); // return solution2(head, k); } /** * 指针 * @param head * @param k * @return */ private ListNode solution1(ListNode head, int k){ if(head == null){ return null; } // 统计节点数 int n = 1; ListNode tail = head; while(tail.next != null){ n++; tail = tail.next; } k = k%n; if(k == 0){ return head; } int cnt = n-k; ListNode dummyHead = head; while(--cnt > 0){ dummyHead = dummyHead.next; } ListNode pre = dummyHead; dummyHead = dummyHead.next; pre.next = null; tail.next = head; return dummyHead; } /** * 双指针: 快慢指针 * @param head * @param k * @return */ private ListNode solution2(ListNode head, int k){ if(head == null){ return null; } // 统计节点数 int n = 1; ListNode tail = head; while(tail.next != null){ n++; tail = tail.next; } k = k%n; if(k == 0){ return head; } ListNode fast = head; int step = k; while(step-- > 0){ fast = fast.next; } ListNode slow = head; while(fast.next != null){ fast = fast.next; slow = slow.next; } fast.next = head; head = slow.next; slow.next = null; return head; } }