zoukankan      html  css  js  c++  java
  • 【Rotate List】cpp

    题目

    Given a list, rotate the list to the right by k places, where k is non-negative.

    For example:
    Given 1->2->3->4->5->NULL and k = 2,
    return 4->5->1->2->3->NULL.

    代码

    /**
     * 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) {
            if (!head || !(head->next)) return head;
            ListNode *p = head;
            int len = 1;
            for (;p->next;++len,p=p->next){}
            ListNode *end = p;
            k = k % len;
            p = head;
            for (size_t i = 0; i < len-k-1; ++i)
            {
                p = p->next;
            }
            end->next = head;
            head = p->next;
            p->next = NULL;
            return head;
        }
    };

    Tips:

    思路很简单,需要注意的是对指针的操作。

    =====================================

    第二次过这道题:

    (1)没有考虑k比ListNodes长度大的情况

    (2)没考虑k加上双指针的边界情况没有考虑完全,所以几次都没有AC。

    完备的思路应该是:先求出来ListNodes的长度,k%len就是真正要rotate的元素。搞清楚这之后,再利用快慢指针常规思路就可以解出来了。

    /**
     * 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) {
                if ( !head || !head->next ) return head;
                int len = 1;
                for ( ListNode* p = head; p->next; ++len, p=p->next){}
                k = k % len;
                ListNode dummpy(-1);
                dummpy.next = head;
                ListNode* p1 = head;
                ListNode* p2 = head;
                for ( int i=0; i<k; ++i ) p2 = p2->next;
                while ( p2->next )
                {
                    p1 = p1->next;
                    p2 = p2->next;
                }
                p2->next = head;
                dummpy.next = p1->next;
                p1->next = NULL;
                return dummpy.next;
        }
    };
  • 相关阅读:
    AB测试原理及样本量计算的Python实现
    数据分析-A/B test
    数据分析-分类分析
    数据分析-漏斗模型(AARRR模型)
    置信区间的I型错误和II型错误
    tableau 计算字段
    tableau数据分层、数据组、数据集
    tableau 地图
    tableau 进阶
    tableau 基础
  • 原文地址:https://www.cnblogs.com/xbf9xbf/p/4467738.html
Copyright © 2011-2022 走看看