[算法导论] 61.旋转链表

该博客主要介绍了如何解决链表旋转问题,重点在于理解在环形链表中,倒数第k个节点是新的头节点,而正数第(n-k)个节点是新的尾节点。通过将tail节点移动n-k位并切断,可以实现链表的旋转。
摘要由CSDN通过智能技术生成

0. 题目

 

1. tail后移动n-k位,再切断,下一个节点即为头节点。(倒序第k个是头节点,正序第n-k个是尾节点,因为是环。)

class Solution:
    def rotateRight(self, head, k):
        if not head or k==0: return head #空链表/不移动
        p = head
        n = 1
        while p.next:
            p = p.next
            n +=1
        k %= n #考虑减少循环次数,取余数
        if k==0:    return head
        k = n-k
        # p遍历到尾节点
        p.next = head
        # 倒序第k个是头节点,正序第n-k个是尾节点。因为是环。
        for i in range(k):
            p = p.next
        # p遍历到新的尾节点
        newh = p.next
        p.next = None
        return newh

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

心心喵

喵喵(*^▽^*)

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

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

打赏作者

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

抵扣说明:

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

余额充值