T61. Rotate List【Medium】
题目
给一个链表,向右轮转 k 个位置(k 是非负数)。
例如:
给出 1->2->3->4->5->NULL 和 k = 2,
返回 4->5->1->2->3->NULL.
思路
主体思路:
① 求出长度 l
② 首位连通
② 右移 (l-k%l) 次 (因为 k 可能大于 l,所以要取余)
③ 把此刻的节点 next 设为 null,并返回原本的 next(因为它去了首节点)
边界处理:
当 k = 0 或者 head 为 空时直接返回。
代码
代码自己写的,能成功运行,稍作注释
//用递归来完成算法
public ListNode rotateRight(ListNode head, int k) {
//若为0或者空则返回
if(k==0||head==null){
return head;
}
ListNode thisNode=head;
ListNode returnNode=new ListNode(0);
int x=1,n=1;
//得到链表长度
while(thisNode.next!=null){
thisNode=thisNode.next;
x++;
}
//连通起来
thisNode.next=head;
while(thisNode.next!=null){
//找到对应的节点,对它进行拆开重连
if(n==(x-k%x)){
returnNode=thisNode.next.next;
thisNode.next.next=null;
return returnNode;
}
thisNode=thisNode.next;
n++;
}
return returnNode;
}
网友评论