本文主要是介绍LeetCode 61 Rotate List,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题意:
将链表旋转k次,每次旋转表示为1->2->...->N变为N->1->2->...->N-1。
思路:
首先要测链表总长度n,因为k如果比n大,那么旋转整圈是没意义的。
然后求出实际要旋转的次数x,最后就是简单的链表在n-x分割再头尾合并了。
代码:
/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:ListNode *rotateRight(ListNode *head, int k) {ListNode *tail;int n = 0;for (ListNode *i = head; i != NULL; i = i->next) {++n;tail = i;}if (n == 0 || k % n == 0) {return head;}k = n - k % n;ListNode *it = head;for (int i = 1; i < k; ++i) {it = it->next;}ListNode *ot = it->next;it->next = NULL;tail->next = head;return ot;}
};
这篇关于LeetCode 61 Rotate List的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!