题目描述

方法一:把后K个整体挪到前面 O(N)

class Solution {
public ListNode rotateRight(ListNode head, int k) {
if (head == null) {
return null;
}
ListNode dummy = new ListNode();
dummy.next = head;
ListNode cur = dummy;
int length = 0;
while (cur.next != null) {
cur = cur.next;
length++;
}
int step = k % length;
ListNode tmp = dummy;
for (int i = 0; i < length - step; i++) {
tmp = tmp.next;
}
if (tmp.next == null) {
return head;
}
ListNode newHead = tmp.next;
tmp.next = null;
cur.next = head;
return newHead;
}
}
方法一:把最后一位挪到前面,挪K次 O(NK),不可取
class Solution {
public ListNode rotateRight(ListNode head, int k) {
if (head == null) {
return null;
}
ListNode dummy = new ListNode();
dummy.next = head;
ListNode pre = dummy, cur = head;
while (cur.next != null) {
cur = cur.next;
pre = pre.next;
}
if (pre == dummy) {
return dummy.next;
}
for (int i = 0; i < k; i++) {
pre.next = null;
cur.next = dummy.next;
dummy.next = cur;
cur = pre;
pre = dummy.next;
while (pre.next != cur) {
pre = pre.next;
}
}
return dummy.next;
}
}