类型:链表
-
- K 个一组翻转链表 ❤️
https://leetcode-cn.com/problems/reverse-nodes-in-k-group/
❓ 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。
输入:head = [1,2,3,4,5], k = 2 输出:[2,1,4,3,5]
💡 本题不涉及复杂的算法,只是需求实现的细节比较多。
💡 迭代
class Solution: def reverseKGroup(self, head: ListNode, k: int) -> ListNode: if not head or not head.next or k == 1: return head dummyHead = ListNode() dummyHead.next = head start = dummyHead end = dummyHead while end: for _ in range(k): if end: end = end.next if end: endNext = end.next pre = start.next cursor = start.next.next while True: nextCursor = cursor.next cursor.next = pre pre = cursor if cursor == end: break else: cursor = nextCursor nextStart = start.next start.next.next = endNext start.next = end start = end = nextStart return dummyHead.next💡 递归
class Solution: def reverseKGroup(self, head: ListNode, k: int) -> ListNode: if not head or not head.next or k == 1: return head def reverse(head, tail, terminal): pre = None cur = head while cur != terminal: theNext = cur.next cur.next = pre pre = cur cur = theNext return tail, head dummyHead = ListNode() dummyHead.next = head pre = dummyHead tail = dummyHead while tail: for _ in range(k): if tail: tail = tail.next if tail: terminal = tail.next head, tail = reverse(pre.next, tail, terminal) pre.next = head tail.next = terminal pre = tail return dummyHead.next