LeetCode题解61. 旋转链表

给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。

示例 1:

输入: 1->2->3->4->5->NULL, k = 2

输出: 4->5->1->2->3->NULL

解释:

向右旋转 1 步: 5->1->2->3->4->NULL

向右旋转 2 步: 4->5->1->2->3->NULL

示例 2:

输入: 0->1->2->NULL, k = 4

输出: 2->0->1->NULL

解释:

向右旋转 1 步: 2->0->1->NULL

向右旋转 2 步: 1->2->0->NULL

向右旋转 3 步: 0->1->2->NULL

向右旋转 4 步: 2->0->1->NULL

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/rotate-list

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解:简单做法(修改指针指向):
```C++
class Solution {
public:
ListNode* rotateRight(ListNode* head, int k) {
if (head == nullptr || k <= 0) return head;
auto len = 1;
auto tail = head;
while (tail->next != nullptr) {
++len;
tail = tail->next;
}
k %= len;
if (k == 0 || len == 1) return head;
k = len - k;
auto tmp = head;
while (--k != 0) {
tmp = tmp->next;
}
auto ret = tmp->next;
tmp->next = nullptr;
tail->next = head;
return ret;
}
};
```
脱裤子放屁法(反转,反转,再反转):
```C++
class Solution {
private:
int length(ListNode* head) {
auto cnt = 0;
while (head != nullptr) {
++cnt;
head = head->next;
}
return cnt;
}
ListNode* revert(ListNode* head, int n) {
ListNode* prev = nullptr, *cur = head, *next = cur->next;
while (--n != 0) {
cur->next = prev;
prev = cur;
cur = next;
next = next->next;
}
cur->next = prev;
return cur;
}
public:
ListNode* rotateRight(ListNode* head, int k) {
if (head == nullptr || k <= 0) return head;
auto len = length(head);
k = k % len;
if (k == 0 || len == 1) return head;
ListNode* p = head;
auto tmp = len - k;
while (tmp-- != 0) {
p = p->next;
}
auto l1 = revert(head, len - k);
auto l2 = revert(p, k);
head->next = l2;
return revert(l1, len);
}
};
```

45码

剃刀付款集成->如何通过关闭按钮X检测剃刀付款模型是否关闭 - javascript

当用户关闭而无需付款时,我在CI框架中使用Razorpay,请创建razor支付模型,然后取消订单,我希望按状态更改为已取消的状态触发查询。所以我怎么能检测到这一点。我已经通过单击jQuery单击关闭功能但无法使用... javascript大神给出的解决方案 Razorpay提供了JS方法来检测模式关闭。您编写的任何JS代码都不会在结帐页面上运行,因为它是…

粗糙的Unicode->没有CLDR的语言代码? - javascript

我在写字典应用。如果用户键入Unicode字符,我想检查该字符是哪种语言。例如字 - returns ['zh', 'ja', 'ko'] العربية - returns ['ar'] a - returns ['en', 'fr', …

LeetCode题解求一根绳子被切两刀能组成一个三角形的概率。

如题题解:我们可以设绳长为1,设:- 其中两段长为x, y且x, y都>0- 故第三段长为1-x-y且>0故可以在二维坐标轴画出一个三角形(由x=0;y=0;1-x-y=0围成)要想构成三角形还要满足:- x+y > 1-x-y => x+y > 0.5- x+1-x-y > y => y < 0.5- y+1…

Python numpy数据指针地址无需更改即可更改 - python

编辑经过一些摆弄之后,到目前为止,我已经隔离了以下状态:一维数组在直接输入变量时提供两个不同的地址,而在使用print()时仅提供一个地址2D数组(或矩阵)在直接输入变量时提供三个不同的地址,在使用print()时提供两个地址3D数组在直接输入变量时提供两个不同的地址,而在使用print()时仅给出一个(显然与一维数组相同)像这样:>>> …

将对象转换为List <object> - c#

我看过类似的问题,但没有什么合适的。我有一个碰巧包含列表的对象。我想把它变成我可以列举的东西。例如:object listObject; // contains a List<Something> List<object> list; list = listObject as List<object>; // list c…