zoukankan      html  css  js  c++  java
  • leetcode61. Rotated List

    问题描述:

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

    Example 1:

    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
    

    Example 2:

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

    解题思路:

    这道题的rotate的定义很有趣,是把最后一个元素挪到了最前面去,然后这样执行K次。

    我们可以先遍历一遍链表,计算得到链表的长度n,然后把首尾两个节点相连。

    从尾节点走(n - k%n) 得到的节点的下一个节点就是新的节点了!

    代码:

    /**
     * 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)
                return head;
            ListNode *p = head;
            int n = 1;
            while(p->next){
                p = p->next;
                n++;
            }
            p->next = head;
            int m = n - k % n;
            
            while(m > 0){
                p = p->next;
                m--;
            }
            head = p->next;
            p->next = NULL;
            return head;
        }
    };

    这道题目也可以用快慢指针做,但是也要先算出来链表长度n然后使用的k是k%n之后的结果

  • 相关阅读:
    Dijkstra模版
    Trie树|字典树的简介及实现
    hdoj_2066一个人的旅行
    什么是java对象的强、软、弱和虚引用
    cxf调用客户端的方法
    CXF几种客户端调用性能
    csf几种调用的性能考虑
    cxf生成服务器端
    CXF在jdk1.6中运行异常解决
    CXF几种客户端调用性能
  • 原文地址:https://www.cnblogs.com/yaoyudadudu/p/9120048.html
Copyright © 2011-2022 走看看