您好,欢迎来到爱go旅游网。
搜索
您的当前位置:首页力扣(LeetCode 25)K个一组翻转链表 python

力扣(LeetCode 25)K个一组翻转链表 python

来源:爱go旅游网

题目

给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。

k 是一个正整数,它的值小于或等于链表的长度。

如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。

示例 :

给定这个链表:1->2->3->4->5

当 k = 2 时,应当返回: 2->1->4->3->5

当 k = 3 时,应当返回: 3->2->1->4->5

说明 :

你的算法只能使用常数的额外空间。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

来源:力扣(LeetCode)
链接:
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

每k个一组,建立一个新head节点,头插入。再合并。

代码

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def reverseKGroup(self, head: ListNode, k: int) -> ListNode:
        l=0
        heads=ListNode(0)
        ans=heads
        ls=head
        while(ls!=None):
            l=l+1
            ls=ls.next
        while(head!=None):
            if l>=k:
                pre=head
                st=head
                for i in range(k):
                    st=st.next
                new=ListNode(0)
                new.next=st
                for i in range(k):
                    last=head.next
                    head.next=new.next
                    new.next=head
                    head=last
                    ans.next=new.next
                ans=pre
                l-=k
            else:
                ans.next=head
                break
        return heads.next
                    
                    

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- igat.cn 版权所有 赣ICP备2024042791号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务