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;
        }
  • 相关阅读:
    Quagga How to use Quagga
    Quagga Case 4
    Quagga Case 3
    Quagga Case 2
    Quagga Routing Suite
    quagga
    quagga 的原理解析 zebra原理解析
    zebra线程管理源码简析
    【习题 4-8 UVA
    【习题 4-7 UVA
  • 原文地址:https://www.cnblogs.com/deltadeblog/p/9037771.html
Copyright © 2011-2022 走看看