zoukankan      html  css  js  c++  java
  • LeetCode61 旋转链表

    给定一个链表,旋转链表,将链表每个节点向右移动 个位置,其中 是非负数。

    示例 1:

    输入: 1->2->3->4->5->NULL, k = 2
    输出: 4->5->1->2->3->NULL
    解释:
    向右旋转 1 步: 5->1->2->3->4->NULL
    向右旋转 2 步: 4->5->1->2->3->NULL
    

    示例 2:

    输入: 0->1->2->NULL, k = 4
    输出: 2->0->1->NULL
    解释:
    向右旋转 1 步: 2->0->1->NULL
    向右旋转 2 步: 1->2->0->NULL
    向右旋转 3 步: 0->1->2->NULL
    向右旋转 4 步: 2->0->1->NULL





    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    /*
    算法思想:
        是先遍历整个链表获得链表长度n,然后此时把链表头和尾链接起来,再往后走n - k % n个节点就到达新链表的头结点前一个点,这时断开链表即可。
    */
    //算法实现:
    class Solution {
    public:
        ListNode *rotateRight(ListNode *head, int k) {
            if (!head)   //特殊情况,链表为空
                return NULL;
            int n = 1;
            ListNode *cur = head;
            while (cur->next) {
                ++n;
                cur = cur->next;
            }
            cur->next = head;  //表尾和表头连接,形成循环链表。
            int m = n - k % n;  //这个是关键,避免k大于n的情况
            for (int i = 0; i < m; ++i) {  
                cur = cur->next;
            }
            ListNode *newhead = cur->next;  //保存新的头结点位置
            cur->next = NULL;  //断开链表
            return newhead;
        }
    };
  • 相关阅读:
    python 线程之 数据同步 Queue
    python 线程之threading(五)
    python 线程之 threading(四)
    python 线程之 threading(三)
    php-属性和方法的重载
    wordpress-4.7.2-zh_CN页面加载慢
    php-__autoload()
    php-_toString()方法
    php-final
    php-parent::和self::
  • 原文地址:https://www.cnblogs.com/parzulpan/p/10061541.html
Copyright © 2011-2022 走看看