明天是 LeetCode 算法题
https://leetcode-cn.com/probl…
解题前须要理解算法构造:
1、链表的构造
/**
* Definition for singly-linked list.
* function ListNode(val, next) {* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
构造相似上面:
{value:val,next:{value:val2,next:null}}
2、输出的 head 其实不是数组模式的,而是下面的构造
之后按构造模仿链表,其中,思路是造成闭环,再断开;
解法还有快慢双指针;
这个图例还蛮清晰的;
https://leetcode-cn.com/probl…
仿写的代码如下:
var rotateRight = function(head, k) {//ListNode 的节点构造为 {value:val,next:{value:val2,next:null}}
if(!head||!head.next||!k){return head}
// 获取链表长度
let len=1
let tmp=head
while(tmp.next){
tmp=tmp.next
len ++
}
// 造成闭环
tmp.next=head
let gap=len-k%len
// 找到切分的节点
while(gap){
tmp=tmp.next
gap --
}
let res=tmp.next
tmp.next=null
return res
};