题解 | #链表中的节点每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) {
if(head ==null || head.next == null){
return head;
}
ListNode tmp = new ListNode(-1);
tmp.next = head;
ListNode pre1 = tmp;
ListNode next1 = pre1.next;
ListNode pre2 = find(pre1, k);
if(pre2 == null){
return head;
}
while(pre2 != null){
ListNode next2 = pre2.next;
pre2.next = null;
ReverseList(next1);
pre1.next = pre2;
next1.next = next2;
pre1 = next1;
next1 = pre1.next;
pre2 = find(pre1, k);
if(pre2 == null){
break;
}
}
return tmp.next;
}
public static ListNode find(ListNode node, int k){
ListNode pre2 = node;
for(int i=0;i<k;i++){
pre2 = pre2 == null?null:pre2.next;
}
return pre2;
}
public static ListNode ReverseList(ListNode head) {
if(head==null||head.next==null)
return head;
ListNode pre = head;
ListNode cur = head.next;
pre.next=null;
while(cur!=null){
ListNode next = cur.next;
cur.next = pre;
pre=cur;
cur=next;
}
return pre;
}
}
