1. 题目2. 读题(需要重点注意的东西)3. 解法4. 可能有帮助的前置习题5. 所用到的数据结构与算法思想6. 总结
1. 题目
思路:
① 剩下的节点是否够k个(遍历一遍)
② 剩下的节点够k个的话,将其中的节点全部翻转
注意:此处翻转有三步: 1. 翻转k个节点 2. 改变前置指针 3. 改变末尾指针
③ 判断剩下的节点,如果满足,则执行第2步,否则直接返回dummy(哨兵)即可
3. 解法---------------------------------------------------解法---------------------------------------------------:
class Solution {
public ListNode reverseKGroup(ListNode head, int k) {
ListNode dummy = new ListNode(-1);
dummy.next = head;
for(ListNode node = dummy;;){
// ①
ListNode cur = node;
int i = 0;
while(cur.next != null && i != k){
i++;
cur = cur.next;
}
// ③
if(cur.next == null && i != k) break;
// ②
else{
ListNode a = node.next,end = cur.next,b = a.next;
ListNode first = a;
while(b != end){
ListNode temp = b.next;
b.next = a;
a = b;
b = temp;
}
node.next = a;
first.next = end;
node = first;
}
}
return dummy.next;
}
}
4. 可能有帮助的前置习题
[LeetCode]206. 反转链表 (java实现) 5. 所用到的数据结构与算法思想
链表 6. 总结
翻转链表的扩展


![[LeetCode] 25. K 个一组翻转链表(java实现) [LeetCode] 25. K 个一组翻转链表(java实现)](http://www.mshxw.com/aiimages/31/737542.png)
