K个一组翻转链表python代码解法
时间: 2023-07-22 18:05:27 浏览: 131
下面是一个用 Python 实现的 K 个一组翻转链表的代码解法:
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def reverseKGroup(head, k):
# 检查链表长度是否大于等于 k
count = 0
node = head
while node and count < k:
node = node.next
count += 1
if count < k:
return head
# 反转前 k 个节点
pre = None
curr = head
for _ in range(k):
next_node = curr.next
curr.next = pre
pre = curr
curr = next_node
# 递归反转剩余部分并连接起来
head.next = reverseKGroup(curr, k)
return pre
```
这段代码中,我们定义了一个 `ListNode` 类来表示链表节点。`reverseKGroup` 函数接受一个链表头节点 `head` 和一个整数 `k`,并返回翻转后的链表头节点。
首先,我们检查链表长度是否大于等于 k。如果小于 k,则直接返回原链表头节点,因为不需要进行翻转。
然后,我们使用一个循环来反转前 k 个节点。我们使用三个指针 `pre`、`curr` 和 `next_node` 来实现反转。在每次循环中,我们将 `curr` 的下一个节点指向 `pre`,然后将 `pre`、`curr` 和 `next_node` 分别更新为 `curr`、`next_node` 和 `next_node.next`。
最后,我们递归调用 `reverseKGroup` 函数来反转剩余部分,并将翻转后的链表连接起来。
希望这个代码解法对你有帮助!
阅读全文