题解 | #链表内指定区间反转#
链表中的节点每k个一组翻转
http://www.nowcoder.com/practice/b49c3dc907814e9bbfa8437c251b028e
import java.util.*;
/*
- public class ListNode {
- int val;
- ListNode next = null;
- } */
public class Solution { /** * * @param head ListNode类 * @param k int整型 * @return ListNode类 */ public ListNode reverseKGroup (ListNode head, int k) { // write code here ListNode dummyNode = new ListNode(-1); // 设置虚拟头结点 dummyNode.next = head;
ListNode pre = dummyNode; // pre指向待翻转链表的前一个结点
// 翻转k个结点
while (findK(pre, k)) {
head = pre.next;
for (int i = 1; i < k; i++) {
ListNode next = head.next;
head.next = next.next;
next.next = pre.next;
pre.next = next;
}
pre = head; // 翻转完k个之后,修改pre指向的结点
}
return dummyNode.next;
}
// 查看是否还剩下k个结点
public boolean findK(ListNode pre, int k) {
for (int i = 0; i < k; i++) {
pre = pre.next;
if (pre == null) {
return false;
}
}
return true;
}
}