题目:给定一个链表,旋转链表,将链表每个节点向右移动 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即可