# LEETCODE 25. Reverse Nodes in k-Group 解题思路分析

K 个一组翻转链表

k 是一个正整数，它的值小于或等于链表的长度。

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

• 你的算法只能使用常数的额外空间。
• 你不能只是单纯的改变节点内部的值，而是需要实际进行节点交换。

```public ListNode reverseKGroup(ListNode head, int k) {
ListNode dummy = new ListNode(0);
ListNode lastEnd=dummy;
Stack<ListNode> stack=new Stack<>();
}
if(stack.size()<k) {
lastEnd.next=first;
break;
}
lastEnd.next=help(stack);
lastEnd=first;
}
return dummy.next;
}

ListNode help(Stack<ListNode> stack){
if(stack.size()==0) return null;
ListNode node = stack.pop();
node.next=help(stack);
return node;
}```

Runtime: 1 ms, faster than 21.90% of Java online submissions for Reverse Nodes in k-Group.

Memory Usage: 40.3 MB, less than 5.17% of Java online submissions for Reverse Nodes in k-Group.

Kotlin版本实现代码：

```fun reverseKGroup(head: ListNode?, k: Int): ListNode? {
val dummy = ListNode(0);
var lastEnd = dummy;
var stack=Stack<ListNode>();
outloop@ while(hd!=null){
var first = hd;
while(stack.size<k&&hd!=null){
stack.push(hd);
hd=hd.next;
}
if(stack.size<k) {
lastEnd.next=first;
break@outloop;
}
lastEnd.next=help(stack);
while(lastEnd.next!=null){
lastEnd=lastEnd.next;
}
}
return dummy.next;
}

fun help(stack: Stack<ListNode>) : ListNode?{
if(stack.size==0) return null;
var node = stack.pop();
node.next=help(stack);
return node;
}```

Runtime: 180 ms, faster than 70.00% of Kotlin online submissions for Reverse Nodes in k-Group.

Memory Usage: 34.6 MB, less than 100.00% of Kotlin online submissions for Reverse Nodes in k-Group.