这题我的第一想法是用头插法,但实际上并不好做,因为每次都需要遍历最后一个。更简单的做法是将其连成环,找到相应的位置重新设头结点和尾结点。这过
有很多细节需要注意,比如K有可能是大于链表长度的,如何重新设置K等都要注意。
ListNode *rotateList(ListNode *head, int k) { if (head == nullptr || k == 0)return head; ListNode *p = head; int n = 1; while (p->next) { n++; p = p->next; } k =n - k%n;//k有可能大于n p->next = head; for (int i = 0; i < k; i++) p = p->next; head = p->next; p->next = nullptr; return head; }