rotate-list

48 篇文章 0 订阅
4 篇文章 0 订阅

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 ++;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值