leedcode系列-025-python-k个一组翻转链表

python-k个一组翻转链表录

k个一组翻转链表

题目描述

给出一个链表,每 k 个节点一组进行翻转,并返回翻转后的链表。
k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么将最后剩余节点保持原有顺序。
示例 :
给定这个链表:1->2->3->4->5
当 k = 2 时,应当返回: 2->1->4->3->5
当 k = 3 时,应当返回: 3->2->1->4->5
我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助

思路

  1. 明确题目含义
    1.1 注意到只有链表在具有k长度时,才能反转,否则不反转
  2. 反转的题目,一般画出链表图
  3. 代码较简单,直接上代码

代码

# 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:
        end = head 
        pre = None
        cur = head
        num = k
        if head == None or head.next == None:
            return head
        if self.is_reverse(head,k):
            while cur != None and num != 0:
                num -= 1
                after = cur.next
                cur.next = pre
                pre = cur
                cur = after
            end.next = self.reverseKGroup(cur,k)
            return pre
        else:
            return cur


    def is_reverse(self,head,k):
        for i in range(k-1):
            if head.next:
                head = head.next
            else:
                return False
        return True
if __name__ == "__main__":
    S = Solution()
    l1 = ListNode(1)
    l2 = ListNode(2)
    l3 = ListNode(3)
    l4 = ListNode(4)
    l5 = ListNode(5)
    l1.next = l2
    l2.next = l3
    l3.next = l4
    l4.next = l5
    res = S.reverseKGroup(l1,3)
    print('--------')
    while res:
        print(res.val,end='')
        res = res.next
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值