zoukankan      html  css  js  c++  java
  • leetcode第一刷_Rotate List

    我提交了好多次,错误莫名其妙的,到后来才明确过来。原来我把题目给理解错了。

    这个题的意思不是说让你把最后的那k个位置的元素移到前面来,这样的问题的做法就是用两个指针,先让一个走。走到一定的长度之后两个一起走。非常easy。它实际的意思是整个链表循环右移,如果一个链表长度是N,那么循环右移N次之后,链表又变回了原来的样子。k的取值范围仅仅说了是非负的。也就是它能够是大于N的。因此实际的移位次数仅仅是(k%N)而已。

    代码就不多说了,非常easy。

    class Solution {
    public:
        ListNode *rotateRight(ListNode *head, int k) {
            if(!head||!head->next||k==0)
                return head;
            int i=0, len=0;
            ListNode *pre=head, *pNode = head, *newHead;
            while(pNode){
                len++;
                pNode = pNode->next;
            }
            pNode = head;
            k %= len;
            if(k == 0)  return head;
            while(i<k&&pNode){
                pNode = pNode->next;
                i++;
            }
            while(pNode->next){
                pre = pre->next;
                pNode = pNode->next;
            }
            newHead = pre->next;
            pre->next = NULL;
            pNode->next = head;
            return newHead;
        }
    };


  • 相关阅读:
    actionscript项目中自加载preloader实现
    as3 弹性跑道模型
    快速排序
    快捷键
    frameset和iframe--框架对象及元素标签对象
    Javascript的陷阱
    JS火狐与IE的差别
    JS运动框架
    面向对象与闭包的使用
    闭包
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/7056178.html
Copyright © 2011-2022 走看看