题解 | #链表中的节点每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) {
ListNode dummy = new ListNode(0);
dummy.next=head;
ListNode pre=dummy;//开始反转前一个位置
ListNode end=pre;//记住结束位置
while(end.next!=null){
//遍历寻找结束节点
for(int i=0;i<k && end!=null;i++){
end=end.next;
}
//结束位置是空不需要反转
if(end==null)
break;
//开始反转位置
ListNode start =pre.next;
//记住截断部分后的位置
ListNode next = end.next;
//完全断开节点
end.next=null;
//反转并连接
pre.next=reverse(start);
//反转原右边连接断开后的左半部分
start.next=next;
//恢复初始位置
pre=start;
//结束位置归位,准备从新计算
end=pre;
}
return dummy.next;
}
public ListNode reverse(ListNode head){
ListNode pre =null;
ListNode cur =head;
while(cur!=null){
ListNode next = cur.next;
cur.next=pre;
pre=cur;
cur=next;
}
return pre;
}
}