题解 | #链表中的节点每k个一组翻转# 复用上一题的代码,稍加判断即可
链表中的节点每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) {
int count = 1;
ListNode tmp = head;
ListNode preNode = new ListNode(-1);
preNode.next = tmp;
ListNode retHeadNode = preNode;
while(tmp != null){
reverse(preNode, tmp, count, k);
count = 1;
preNode = tmp;
tmp = tmp.next;
}
return retHeadNode.next;
}
public static void reverse(ListNode preNode, ListNode tmp, int count, int k){
ListNode nextNode;
ListNode next2Node;
//校验一遍数据是否够用
int flag = 0;
ListNode flagNode = tmp;
while(flagNode != null){
flag++;
flagNode = flagNode.next;
}
if(flag < k){
return;
}
//从tmp开始k位的部分反转
while(tmp != null && count < k){
nextNode = tmp.next;
if(nextNode == null){
break;
}
next2Node = tmp.next.next;
ListNode nextTmpNode = preNode.next;
preNode.next = nextNode;
nextNode.next = nextTmpNode;
tmp.next = next2Node;
count++;
}
}
}
/*
* 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) {
int count = 1;
ListNode tmp = head;
ListNode preNode = new ListNode(-1);
preNode.next = tmp;
ListNode retHeadNode = preNode;
while(tmp != null){
reverse(preNode, tmp, count, k);
count = 1;
preNode = tmp;
tmp = tmp.next;
}
return retHeadNode.next;
}
public static void reverse(ListNode preNode, ListNode tmp, int count, int k){
ListNode nextNode;
ListNode next2Node;
//校验一遍数据是否够用
int flag = 0;
ListNode flagNode = tmp;
while(flagNode != null){
flag++;
flagNode = flagNode.next;
}
if(flag < k){
return;
}
//从tmp开始k位的部分反转
while(tmp != null && count < k){
nextNode = tmp.next;
if(nextNode == null){
break;
}
next2Node = tmp.next.next;
ListNode nextTmpNode = preNode.next;
preNode.next = nextNode;
nextNode.next = nextTmpNode;
tmp.next = next2Node;
count++;
}
}
}