61.Rotate List

Posted luo-c

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了61.Rotate List相关的知识,希望对你有一定的参考价值。

给定一个单链表,以及一个非负整数 k ,求将此链表循环右移 k 个单个后的新链表。

Input: 1->2->3->4->5->NULL, k = 2
Output: 4->5->1->2->3->NULL
Explanation:
rotate 1 steps to the right: 5->1->2->3->4->NULL
rotate 2 steps to the right: 4->5->1->2->3->NULL


思路:
第一遍先记录链表的长度 n,以及其最后一个节点, 如果 k >n,就取模 k = k % n;如果 k ==0,直接返回,否则,将最后一个节点指向头结点。再对链表走 (n-k)个长度,走完 n-k 长度后,下一个节点就是新的头结点,将当前节点->next = NULL,返回下一个节点head即可。

class Solution {
public:
    ListNode* rotateRight(ListNode* head, int k) {
        if (!head) return NULL;
        int n = 1, count = 0;
        ListNode* tmp_head = head;
        while (tmp_head->next) {
            tmp_head = tmp_head->next; n++;
        }
        k = k % n;
        if (k == 0) return head;
        tmp_head->next = head;
        while (head) {
            count++;
            if (count == n - k) {
                tmp_head = head;
                head = head->next;
                tmp_head->next = NULL;
                break;
            }
            head = head->next;
        }
        return head;
    }
};

 

以上是关于61.Rotate List的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode OJ 61. Rotate List 考虑边界条件

61. Rotate List

61. Rotate List

61. Rotate List

61. Rotate List

61. Rotate List