leetcode hot100 k个一组翻转链表

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

    def reverse(self,head,tail):
        res  = ListNode(0)
        prev = res
        cur = head
        while prev!=tail:
            tmp =cur.next
            cur.next = prev
            prev = cur
            cur = tmp
        return tail , head
    def reverseKGroup(self, head: Optional[ListNode], k: int) -> Optional[ListNode]:
        # 每次把一个group里面的东西翻转,然后把首位节点的指针做一下


        dummy = ListNode(0)
        dummy.next = head
        pre = dummy

        while head:
            tail = pre
            for i in range(k):
                tail = tail.next
                if not tail:
                    return dummy.next

            nex = tail.next
            head , tail = self.reverse(head,tail)
            pre.next = head
            tail.next = nex
            pre = tail
            head = tail.next
        return dummy.next


        # dummy = ListNode(0)
        # length = 0
        # p = head
        # while p:
        #     p = p.next
        #     length += 1
        # prev = dummy
        # cur = head
        # while length > k:
        #     head = cur
        #     for i in range(k-1):
        #         cur = cur.next
        #     tail = cur

            
        #     prev.next = head
        #     tail.next = cur
        #     prev = tail
        #     length -= k

最麻烦的是前后的链接处的处理,这里给一个pre是最好的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值