Python
灵茶山艾府中提供了迭代写法,但细节太多,此题以递归解法为主!!!
# 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: Optional[ListNode], k: int) -> Optional[ListNode]:
start = end = head
for _ in range(k):
if not end:
return start
end = end.next
newHead = self.reverseList(start, end)
start.next = self.reverseKGroup(end, k)
return newHead
# 翻转[a, b)之间的链表
def reverseList(self, start, end):
pre = None
cur = start
while cur != end:
nxt = cur.next
cur.next = pre
pre = cur
cur = nxt
return pre
Java
参考《算法小抄》
class Solution {
public ListNode reverseKGroup(ListNode head, int k) {
if (head == null) {
return null;
}
ListNode start = head, end = head;
for (int i = 0; i < k; ++i) {
if (end == null) {
return head;
}
end = end.next;
}
ListNode newHead = reversePart(start, end);
start.next = reverseKGroup(end, k);
return newHead;
}
// 翻转区间[a, b)之间的链表,并返回反转后的头结点。注意:这里翻转后断开了
public ListNode reversePart(ListNode a, ListNode b) {
ListNode pre = null, cur = a;
while (cur != b) {
ListNode next = cur.next;
cur.next = pre;
pre = cur;
cur = next;
}
return pre;
}
}
博客聚焦于K个一组翻转链表问题,提到灵茶山艾府有迭代写法但细节多,主要采用递归解法。还给出了Python和Java两种语言的实现方向,Java参考《算法小抄》。
1161

被折叠的 条评论
为什么被折叠?



