给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。
https://leetcode-cn.com/problems/rotate-list/
//方法1:先把链表形成环,在第n - 1 -(k % n)个节点的后面断开,
public ListNode rotateRight1(ListNode head, int k) {
if (head == null){
return null;
}
ListNode temp1 = head;
int count = 1;
while(temp1.next != null){
count ++;
temp1 = temp1.next;
}
k = k % count;
if(k == 0){
return head;
}
temp1.next = head;
for(int i = 0; i < count - k; i ++){
temp1 = temp1.next;
}
ListNode temp2 = temp1.next;
temp1.next = null;
return temp2;
}
//方法2:找到要断开的地方A(倒数第k+1个节点的后面),把链表尾连接到头,并断开A
public ListNode rotateRight(ListNode head, int k) {
if (head == null){
return null;
}
ListNode temp1 = head;
int count = 0;
while(temp1 != null){
count ++;
temp1 = temp1.next;
}
k = k % count;
if(k == 0){
return head;
}
temp1 = head;
ListNode temp2 = head;
ListNode newHead;
for(int i = 0;i < k;i++){
temp1 = temp1.next;
}
while(temp1.next != null){
temp1 = temp1.next;
temp2 = temp2.next;
}
newHead = temp2.next;
temp1.next = head;
temp2.next = null;
return newHead;
}