• 【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;
        }
    };
  • 相关阅读:
    字典树略解
    NOIP2018普及组初赛解题报告
    Codeforces 23A You're Given a String...
    远程消息推送的简单方法
    IOS5,6,7的新特性
    面试问题1
    IOS推送消息的步骤
    C面试问题
    label的自适应文本,让文本自适应
    TCP连接的三次握手,TCP/UDP区别联系,socket连接和http连接的区别
  • 原文地址:https://www.cnblogs.com/xbf9xbf/p/4467738.html
Copyright © 2020-2023  润新知