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

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

    示例 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

    解决思路:


    计算链表的长度N,指向链表最后一个节点的指针end;

    实际只需移动k%N个位置;

    end.next=head,构成环形链表,同时移动head与end,移动N-k个位置即可。

        public static ListNode rotateRight(ListNode head, int k) {
    
            if (k == 0 || head == null) return head;
            ListNode end = head;
            int N = 0;  // 链表包含的节点数
            while(end.next != null) {
                end = end.next;
                N++;
            }
            N ++;
            k = k % N;
    
            end.next = head;
            while(N-k>0) {
                head = head.next;
                end = end.next;
                k++;
            }
            end.next = null;
            return head;
        }
  • 相关阅读:
    【xinsir】githook之precommit分享
    node进程一些信号的意义
    ES6篇
    Webpack4篇
    Node篇
    Vuex篇
    WebStorage篇
    HTML5篇
    html5语义化标签大全
    emmet语法
  • 原文地址:https://www.cnblogs.com/deltadeblog/p/9037771.html
Copyright © 2011-2022 走看看