美文网首页
每天一题LeetCode【第44天】

每天一题LeetCode【第44天】

作者: 草稿纸反面 | 来源:发表于2017-04-11 00:42 被阅读65次

    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天】

          本文链接:https://www.haomeiwen.com/subject/zgtyattx.html