思路1:连接成环
- 一开始的思路是双指针,但
如果很大,速度上不去,所以必须要读出初始链表的长度
,这一步不得不做 - 将
tail和head连接起来,变成环 - 找到合适的位置断开,
#card=math&code=step%20%3D%20list%5C_size%20-%20%28k%20%5C%25%20list%5C_size%29&id=vCyRz)
代码1:
 
/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode() : val(0), next(nullptr) {} *     ListNode(int x) : val(x), next(nullptr) {} *     ListNode(int x, ListNode *next) : val(x), next(next) {} * }; */class Solution {public:    ListNode* rotateRight(ListNode* head, int k) {        // 虽然我不愿意去读整个链表的长度,但是出于简化计算的目的,还是需要这么干的        if (!head || k <= 0) {            return head;        }        int list_size = 1;        ListNode* ptr_1 = head;        while (ptr_1->next) {            ptr_1 = ptr_1->next;            list_size++;        }        ptr_1->next = head;        int step = list_size - (k % list_size);        while (step--) {            ptr_1 = ptr_1->next;        }        ListNode* new_head = ptr_1->next;        ptr_1->next = nullptr;        return new_head;    }};