码迷,mamicode.com
首页 > 其他好文 > 详细

61.Rotate List

时间:2020-05-31 01:16:22      阅读:80      评论:0      收藏:0      [点我收藏+]

标签:class   output   return   长度   循环   单链表   out   NPU   put   

给定一个单链表,以及一个非负整数 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

标签:class   output   return   长度   循环   单链表   out   NPU   put   

原文地址:https://www.cnblogs.com/luo-c/p/12995565.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!