题解 | #链表中的节点每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) {
// write code here
Stack<ListNode> stack = new Stack<ListNode>();
ListNode temp1 = head;//用来确定链表长度
ListNode temp2 = head;//用来将链表值入栈
ListNode ans = new ListNode(-1);//分组反转后的链表
ListNode temp3 = ans;
int len = 0;//确定链表长度
while(temp1 != null){
len++;
temp1 = temp1.next;
}
int cnt = len/k;
int cnt2 = len%k;
for(int i=0;i<cnt;i++){
for(int j=0;j<k;j++){
stack.push(temp2);
temp2 = temp2.next;
}//入栈
for(int j=0;j<k;j++){
temp3.next = stack.pop();
temp3 = temp3.next;
}//出栈
}
temp3.next = temp2;
return ans.next;
}
} 