[leetcode篇]LeetCode 61.旋转链表

🥇问题描述:

LeetCode 61.旋转链表
在这里插入图片描述

🥇问题解析:

此题为旋转链表,其实这个题就是要把相关的链表节点,向后移动几位,如果后半段的链表节点在链表中移动位数不够的话,就移动节点到前半个链表。那么我们都知道单链表只能从头节点一直遍历到单向遍历到链表的尾节点,那么对于这个题来说,如果要旋转尾节点,那么尾节点自然要旋转到链表的其他节点,根据这样的思路我们不难想到如果连接链表的头节点和为节点,这样本题不就轻松的解决了吗

🥇 思路:

我们现在已知链表的头节点,和要旋转的节点位数。

  • 那我们想想如果链表为空,是不是就不用旋转,直接就返回这个空节点。
  • 如果链表中只有一个节点,是不是无论旋转结尾都和没旋转一样。
  • 如果要移动的节点个数为链表个数的倍数,也等于没有旋转。
  • 现在我们把链表的头节点和尾节点连接起来在遍历这个循环链表的过程中找到新链表的尾节点先保存链表尾节点的下一个节点(也就是新链表的头节点)然后从新链表的尾节点之后断开循环链表,这样就变成了旋转之后的链表。

🥇 看图说话:

在这里插入图片描述

💯相关代码:

       public Node rotateRight(int k) {
           //判断链表是否为空,如果链表为空,或者链表中只有一个节点
          if(k== 0 || head == null || head.next == null){
               return head;
          }
            //遍历链表,求出链表的长度,判断旋转位数是不是链表长度的倍数
            int count = 1;
            Node cur = head;
            while(cur.next != null){
                count++;
                cur = cur.next;
            }
            int add = count - k % count;
            //如果旋转链表节点的个数是链表长度的倍数,那么就等于没有旋转链表,接直接返回原链表的头节点
            if(add == count){
                return head;
            }
            //连接链表中的头节点和尾节点
            cur.next = head;
            //找到新链表的尾节点,断开尾节点之后的链表
            while(add-- > 0){
            cur = cur.next;
            }
            Node temp = cur.next;
            cur.next = null;
            return temp;
     }

在这里插入图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小周学编程~~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值