问题
给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。
例子
思路
-
方法1
把链表倒数第k个结点拿出来,插到最前面,同时把倒数k+1个结点的next置为空
-
方法2
代码
//方法1
class Solution {
public ListNode rotateRight(ListNode head, int k) {
if(head==null || k==0) return head;
ListNode tail = head;
int len = 1;//最后一个结点是没有加1
//如果不是最后一个结点
while(tail.next!=null){
tail=tail.next;
len++;
}
k=k%len;
if(k==0) return head;
ListNode now=head;
//得到倒数第k+1个结点
//倒数第k+1个,即正数第len-k个,因为开始时已经是第一个结点了,再经过len-k-1就到达
for(int i=0; i<len-k-1; i++)
now=now.next;
//hhead是倒数第k个结点
ListNode hhead = now.next;
//第k个结点的next为空
now.next=null;
//最后一个结点插到head前面
tail.next=head;
return hhead;
}
}
//方法2