/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public ListNode rotateRight(ListNode head, int n) {
<span style="background-color: rgb(255, 255, 51);">ListNode tmp = new ListNode(-1); // 求链表的长度
tmp.next = head;
int i=0;
while(tmp.next != null){
i++;
tmp = tmp.next;
}
</span> if(i==0 || n==0)
return head;
<span style="background-color: rgb(255, 204, 204);">int k = i - n%i, j=0;//求挪动的位置</span>
if(k%i == 0)
return head;
<span style="background-color: rgb(153, 255, 153);">ListNode tmp2 = new ListNode(-1);//设置下一个开头和新的尾巴
tmp2.next = head;
ListNode cur = head;
while(j<k){
j++;
cur = cur.next;
tmp2 = tmp2.next;
}</span>
tmp2.next = null;
ListNode h2 = cur;
<span style="background-color: rgb(204, 255, 255);">while(cur.next!=null){//将新的开头连成环
cur = cur.next;
}
cur.next = head;</span>
return h2;
}
}
注意点:指针不要搞乱,安全起见都是重新申请的。如果重复利用,很容易陷入无线循环。
Given a list, rotate the list to the right by k places, where k is non-negative.
For example:
Given 1->2->3->4->5->NULL
and k = 2
,
return 4->5->1->2->3->NULL
.