旋转链表

    技术2022-07-11  127

    给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。

    示例 1: 输入: 1->2->3->4->5->NULL, k = 2 输出: 4->5->1->2->3->NULL 解释: 向右旋转 1 步: 5->1->2->3->4->NULL 向右旋转 2 步: 4->5->1->2->3->NULL

    示例 2: 输入: 0->1->2->NULL, k = 4 输出: 2->0->1->NULL 解释: 向右旋转 1 步: 2->0->1->NULL 向右旋转 2 步: 1->2->0->NULL 向右旋转 3 步: 0->1->2->NULL 向右旋转 4 步: 2->0->1->NULL

    求出表长找到旋转后头指针的位置,head移动的步数应该是表长-k对表长取余,可以找一下规律。例1表长为5,k = 2,head应该移动5-2%5 = 3把head前面的断掉 struct ListNode* rotateRight(struct ListNode* head, int k) { if (head == NULL || head->next == NULL || k == 0) return head; int length = 1;//表长,head不为空从1开始,后面判断就是record->next struct ListNode* record = head; struct ListNode* before = NULL;//用来保存head的前一个结点 while (record->next) { length++; record = record->next; } record->next = head;//组成一个环 int move = length - k % length; while (move--) { before = head; head = head->next; } before->next = NULL;//断掉 return head; }

    来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/rotate-list 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    Processed: 0.010, SQL: 9