leetcode题解-61. Rotate List

本文介绍了一种链表右旋算法的实现方式,通过先获取链表长度并形成环状结构,然后根据k值找到合适的断点,从而实现链表的有效旋转。

61,题目:

Given a list, rotate the list to the right by k places, where k is non-negative.

For example:
Given 1->2->3->4->5->NULL and k = 2,
return 4->5->1->2->3->NULL.

本题是将链表在某处进行翻转,但问题是k值可能比链表总长度还要大,这就会带来一定的麻烦。为了方便起见,我们可以先遍历链表,获取链表的总长度,然后将链表首尾相连编成一个环,这样做的好处是我们可以很容易获得要反转的位置,然后在该处将链表截断即可。代码入下:

    public ListNode rotateRight1(ListNode head, int k) {
        if(head==null||head.next==null||k==0) return head;

        //获取链表的总长度
        ListNode index=head; int len=1;
        while(index.next!=null)
        {index=index.next; len++;}
        //将链表首尾相连形成环
        index.next=head;

        //找到需要截断的位置,因为k可能大于链表总长度。所以这里使用取余操作
        for(int i=0;i<len-k%len;i++)
        {
            index=index.next;
        }
        //将该处截断,指向空指针即可
        ListNode result=index.next;
        index.next=null;
        return result;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值