LeetCode 61 Rotate List

来源:互联网 发布:php var_export 编辑:程序博客网 时间:2024/05/21 10:26

题意:

将链表旋转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;    }};