Leetcode K个一组翻转链表
双指针法,java solution
class Solution {
public ListNode reverseKGroup(ListNode head, int k) {
if(head == null || head.next == null) return head;
//设置pre和index节点
ListNode pre = head, index = head.next;
int m = 0;
while(++m < k && index != null) {
pre.next = index.next;
index.next = head;
head = index;
index = pre.next;
}
if(m < k) { //这是链表长度小于k时,我们前面的操作也将链表给反转了,此时我们需要反转回去
return reverseKGroup(head, m);
}
pre.next = reverseKGroup(index, k);
return head;
}
}
这样每次逆时针翻转一个节点,直至翻转k个节点之后,由翻转下一组节点,
pre 始终指向下一个待翻转的节点,index 在一开始是待翻转的节点,在翻转之后,新的 head 节点需要更新,然后 index 再返回去翻转下一个节点。