/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
思路就是 先将链表首尾相接变成循环列表,然后按照k值找到切断的点切开,返回新的头部
1ms 99.97 88.48
class Solution {
public ListNode rotateRight(ListNode head, int k) {
if(head==null)
return head;
int len=1;
ListNode cur=head;
while(cur.next!=null){
len++;
cur=cur.next;
}
cur.next=head; //找到尾结点进行首尾相接
int step=len-k%len-1; //按照规律进行计算步数,从当前头找到新头
//结点前一个结点的步数,这里如果len和k成整数倍,则就是原链表,
//但是没做该项判断
ListNode cur2=head; //存放新头结点前一个结点,
//对应也就是step式中的-1
while(step>0){
cur2=cur2.next;
step--;
}
ListNode result=cur2.next; //先存放结果,下一步进行切断
cur2.next=null;
return result;
}
}
leetcode No.61旋转链表
最新推荐文章于 2024-04-19 16:57:29 发布