Rotate List

来源:互联网 发布:python thread sleep 编辑:程序博客网 时间:2024/04/30 13:09

1.题目

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

给出链表1->2->3->4->5->null和k=2

返回4->5->1->2->3->null

2.算法

这是一道链表操作的题,就是用runner和Walker定位到要旋转的那个点,以下个点为开头,以当前点为结尾重组链表,需要注意的点就是旋转的结点数可能超过链表长度,所以我们要对这个进行取余

    public ListNode rotateRight(ListNode head, int n)     {        // write your code here    if (head == null)    {    return null;    }    ListNode walker = head;    ListNode runner = head;    int idx = 0;    while (runner != null && idx < n)    {    runner = runner.next;    idx++;    }    if (runner == null)    {    n %= idx;    idx = 0;    runner = head;        while (runner != null && idx < n)        {        runner = runner.next;        idx++;        }    }    while (runner.next != null)    {    walker = walker.next;    runner = runner.next;    }    runner.next = head;    ListNode newHead = walker.next;    walker.next = null;    return newHead;    }


0 0