题解 | #旋转链表#
旋转链表
https://www.nowcoder.com/practice/1ad00d19a5fa4b8dae65610af8bdb0ed
struct ListNode* rotateLinkedList(struct ListNode* head, int k ) { if ( head == NULL ) return NULL; struct ListNode* temp = head; struct ListNode* tail = NULL; struct ListNode* newtail = NULL; struct ListNode* newhead = NULL; //记录断开节点的前后两个节点,以及原本链表的最后一个节点,最后重新排序即可 int len = 0; while ( temp ) { //寻找链表结尾以及计算链表长度 ++len; if ( !temp->next ) tail = temp; temp = temp->next; } if ( k == len ) return head; //k 和 链表长度一样不用操作 temp = head; k = k % len; //k 大于 链表长度需要取余 for ( int i = 0; i < len - k - 1; ++i ) { //寻找需要断开的节点前后的两个点 temp = temp->next; } newtail = temp; newhead = temp->next; newtail->next = NULL; tail->next = head; return newhead; }