旋转单链表

旋转单链表

问题

这个题目说的是,给你一个单链表和一个数字 k,你要把链表右边的节点旋转到链表左边,共旋转 k 次。

比如说,给你的单链表是:

0 -> 1 -> 2 -> 4 -> 8

给你的数字 k 是 3:

k = 3

把链表右边的节点一个个旋转到左边,操作 3 次。先是节点 8,然后是节点 4,最后是节点 2。
剩下的节点 0 和 1 保持不动。最后得到旋转后的链表是:

2 -> 4 -> 8 -> 0 -> 1

代码

public class AlgoCasts {

  public class ListNode {
    int val;
    ListNode next;

    ListNode(int x) {
      val = x;
    }
  }

  // Time: O(n), Space: O(1)
  public ListNode rotateRightToLeft(ListNode head, int k) {
    if (head == null || head.next == null || k <= 0) return head;
    ListNode end = head;
    int n = 1;
    for (; end.next != null; end = end.next) ++n;
    end.next = head;

    k %= n;
    ListNode newEnd = head;
    for (int i = 0; i < n-k-1; ++i) newEnd = newEnd.next;
    ListNode newHead = newEnd.next;
    newEnd.next = null;
    return newHead;
  }

}

  转载请注明: ForwardXu 旋转单链表

 上一篇
算法时间复杂度求解法【详细过程说明】 算法时间复杂度求解法【详细过程说明】
算法时间复杂度求解法 在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间量度,基座T(n)=O(f(n))。它表示随问题规模n的增大,算
2019-01-06
下一篇 
ES官方调优指南翻译 ES官方调优指南翻译
ES官方调优指南翻译ES发布时带有的默认值,可为es的开箱即用带来很好的体验。全文搜索、高亮、聚合、索引文档 等功能无需用户修改即可使用,当你更清楚的知道你想如何使用es后,你可以作很多的优化以提高你的用例的性能,下面的内容告诉你 你应该/
2019-01-06
  目录