栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

将给出的链表中的节点每k个一组翻转_每隔k个节点反转链表?

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

将给出的链表中的节点每k个一组翻转_每隔k个节点反转链表?

目录

题目思路翻转[p,q)区间的链表代码

题目

题目链接
对给出的链表(无空头结点),每k个结点为一组,将组内结点翻转
若最后剩下不足k个结点,则这部分结点不翻转
返回翻转后的链表表头

思路

使用3个指针p,q,pre
p:指向本次需要翻转的一段链表的第一个结点
q:指向需要翻转的下一段链表第一个结点,即本次需要翻转的一段链表尾结点的下一个结点
pre:指向已翻转的上一段链表尾结点

起始时,初始化一个空的头结点,pre指向该空的头结点,p指向第一个有数据的结点

    q每次从p开始移动k次,直到移动到下一段k个结点的第一个结点,此时[p,q)中结点共k个,翻转该段链表翻转后,令pre.next指向翻转后的这一段链表的头部,使链表不会断开pre移动到已翻转的k个结点的最后一个(即p的位置,p在反转前指向k个结点的第一个,翻转后该节点变为k个结点中最后一个)p移动到下一段k个结点的第一个(即q的位置)

重复以上过程,直到表尾

翻转[p,q)区间的链表

用头插法反转(带头结点)链表时,初始时头结点指向null,使得翻转后尾结点也指向null
若要令尾结点指向特定的结点(在本题中即为指向下一段k个结点的第一个),在开始时令头结点先指向该节点即可实现

	#反转[start,end)内的结点
    def reverseCell(self, start, end):
    	#创建一个空的头结点,指向end
        falseH=ListNode(0)
        falseH.next=end
        p=start
        while p!=end:
            q=p.next
            p.next=falseH.next
            falseH.next=p
            p=q
        return falseH.next
代码
class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None
        
class Solution:
    def reverseCell(self, start, end):
        falseH=ListNode(0)
        falseH.next=end
        p=start
        while p!=end:
            q=p.next
            p.next=falseH.next
            falseH.next=p
            p=q
        return falseH.next
    def reverseKGroup(self, head, k):
        if not head:
            return None
        p=head
        pre=ListNode(0)
        flag=True
        while p: 
        	#遍历链表,每k个反转一次,计数未到k时遍历结束,则不反转
            # 设置一个空的头结点,pre初始化指向该头结点
            # 用pre保存上一段链表尾,每反转一段链表,pre.next指向反转后的表头,pre移动至反转后的表尾
            q=p
            counter=1
            while q and counter
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/782875.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号