题目:给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数
class Solution {
public:
ListNode* rotateRight(ListNode* head, int k) {
ListNode* cur = head;
int j = 1;
while (cur != NULL && cur->next != NULL) {
cur = cur->next;
j++;
};
int move = k % j;
if (move == 0) return head;
ListNode* cut = head;
for (int i = 0; i < j-move-1; i++) cut = cut->next;
ListNode* result = cut->next;
cut->next = nullptr;
cur->next = head;
return result;
}
};
大致思路:
- 先获得整个链表的长度
- 无论链表怎么移动,移动范围在是链表长度范围之内的,所以对移动值取余
- 获得移动结点前面的一个结点A
- 让首移动结点的next指向第一个结点,让A 结点指向nullptr即可