题目要求:
分析:
这道题目似曾相识,我曾经说过了dummy大法好,在这里也是一样的。
先定义一个节点fast,找到链表的尾部,固定在那里,并顺便求出这个链表的长度len;
再定义一个节点slow,走len - (k % len)步,指向的那个节点将是新链表的最后一个节点;
再令fast.next指向head,slow.next指向null就可以了。
具体代码如下:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode rotateRight(ListNode head, int k) {
if(head == null || head.next == null)
return head;
ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode fast = dummy, slow = dummy;
int len = 0;
while(fast.next != null) {
fast = fast.next;
len ++;
}
for(int j = len - k % len; j > 0; j --) {
slow = slow.next;
}
fast.next = dummy.next;
dummy.next = slow.next;
slow.next = null;
return dummy.next;
}
}