每天一题LeetCode【第44天】

T61. Rotate List【Medium

题目

给一个链表,向右轮转 k 个位置(k 是非负数)。

例如:

给出 1->2->3->4->5->NULL 和 k = 2,
返回 4->5->1->2->3->NULL.

思路

主体思路:

① 求出长度 l

② 首位连通

② 右移 (l-k%l) 次 (因为 k 可能大于 l,所以要取余)

③ 把此刻的节点 next 设为 null,并返回原本的 next(因为它去了首节点)

边界处理:

当 k = 0 或者 head 为 空时直接返回。

代码

代码自己写的,能成功运行,稍作注释

//用递归来完成算法
 public ListNode rotateRight(ListNode head, int k) {
        //若为0或者空则返回
        if(k==0||head==null){
            return head;
        }
        ListNode thisNode=head;
        ListNode returnNode=new ListNode(0);
        int x=1,n=1;
        //得到链表长度
        while(thisNode.next!=null){
            thisNode=thisNode.next;
            x++;
        }
        //连通起来
        thisNode.next=head;
        while(thisNode.next!=null){
            //找到对应的节点,对它进行拆开重连
            if(n==(x-k%x)){
                returnNode=thisNode.next.next;
                thisNode.next.next=null;
                return returnNode;
            }
            thisNode=thisNode.next;
            n++;
        }
        return returnNode;
    }

你可能感兴趣的:(每天一题LeetCode【第44天】)