赞
踩
给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。
示例 1:
输入:head = [1,2,3,4,5], k = 2
输出:[4,5,1,2,3]
示例 2:
输入:head = [0,1,2], k = 4
输出:[2,0,1]
提示:
链表中节点的数目在范围 [0, 500] 内
-100 <= Node.val <= 100
0 <= k <= 2 * 109
先找到尾结点,和链表长度,然后求余,防止无效的循环翻转。然后修改3个指针即可。
/** * 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) return head; int n = 0; ListNode* tail; for(auto p = head; p != NULL; p = p->next) { tail = p; n ++; } k %= n; if(!k) return head; ListNode* p = head; for(int i = 0; i < n - k - 1; i ++ ) p = p->next; tail->next = head; head = p->next; p->next = nullptr; return head; } };
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。