原题网址:https://leetcode.cn/problems/reverse-nodes-in-k-group/submissions/
给一个链表,一个k值,要求每k个节点为一组,进行翻转,不足k的不用管;
// 每k个节点是一组,对这组的节点进行翻转。
// 如果不够k个,就不用翻转了。
public ListNode reverseKGroup(ListNode head, int k) {
// 需要设置一个虚拟节点
ListNode dummyHead = new ListNode(-1);
dummyHead.next = head;
ListNode node = dummyHead;
ListNode frist = head;
ListNode tail = head;
ListNode cur = head;
while(cur != null) {
for(int i=0;i<k-1;i++) {
tail = tail.next;
if(tail == null) {
return dummyHead.next;
}
}
// 截取k个节点,断开
ListNode next = tail.next;
tail.next = null;
node.next = null;
// 翻转
ListNode result = reverseList(frist);
frist.next= next;
node.next = tail;
node = frist;
cur = next;
frist = cur;
tail = cur;
}
return dummyHead.next;
}
private ListNode reverseList(ListNode head) {
ListNode first= null;
ListNode cur = head;
while(cur != null) {
ListNode next = cur.next;
cur.next = first;
first = cur;
cur = next;
}
return first;
}