rotate-list

来源:互联网 发布:网游编程课程 编辑:程序博客网 时间:2024/05/17 09:20

1、来源:rotate-list

Given a list, rotate the list to the right by k places, where k is non-negative.
For example:
Given1->2->3->4->5->NULLand k =2,
return4->5->1->2->3->NULL.

2、思路,递归的本质是栈,例子中进栈1、2、3、4、5,出栈k = 2时,做处理即可;
3、代码:

public class Solution {    private int nodenum = 0;    private ListNode pHead = null;//临时的头部节点    private ListNode tail = null;//尾节点    private ListNode res;    private int n = 0;   //实际上要翻转的个数,如果n大于链表的个数nodenum,则n%=nodenum    int count = 0;      //递归执行中,所有节点进栈后   开始,由count来计数已出栈的元素个数    public ListNode rotateRight(ListNode head, int n) {        if(head == null || n == 0 || head.next == null )            return head;        pHead = head;        res = head;        this.n = n;        rotate(head);        return res;    }    /**     *      * @param head     * @param count 尾节点     */    private void rotate(ListNode head) {        if(head == null){   //计算节点数后取余            n = n % nodenum;            return;        }        nodenum++;        if(head.next == null)            tail = head;        rotate(head.next);        if(n == 0)  //n处理为0,即不用移动            return ;        if(count == n ){//count 为已出栈的个数,当已出栈个数为 n,当前节点为要移动链表的前一个指针            res = head.next;            head.next = null;            tail.next = pHead;         }        count ++;    }}