其他分享
首页 > 其他分享> > LeetCode 25. K 个一组翻转链表

LeetCode 25. K 个一组翻转链表

作者:互联网

25. K 个一组翻转链表

Difficulty: 困难

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

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

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

示例:

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

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

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

说明:

Solution

这道题目的难点在于题意的要求是局部翻转链表中的一部分而不是链表的整个部分,也就是翻转完了链表的一个部分之后后续的还需要正常“接”回来,这道题局部翻转链表的操作也是LeetCode 143. 重排链表题的一个考点,如果之前做过这道题应该调试几下就能解出来。

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def reverseKGroup(self, head: ListNode, k: int) -> ListNode:
        if not head: return head
        
        slow = head
        i = 0
        while slow:
            slow = slow.next
            i += 1
            
        dummy = pre = ListNode(-1)
        pre.next = head
        t = i // k
        for i in range(t):
            mid = pre
            pCurrent = pre.next
            for _ in range(k-1):
                if pCurrent and pCurrent.next:
                    current = pCurrent.next
                    pCurrent.next = current.next
                    current.next = mid.next
                    mid.next = current
            pre = pCurrent
        return dummy.next

标签:pre,25,head,pCurrent,链表,next,LeetCode,翻转
来源: https://www.cnblogs.com/swordspoet/p/14194075.html