package com.interview.books.leetcodeoj;
import com.interview.leetcode.utils.ListNode;
/**
* Created_By: stefanie
* Date: 14-12-18
* Time: 下午4:33
*/
public class LOJ25_ReverseNodesInKGroup {
//1.remember to set dummy.next = head, when create a dummyHead
//2.count start from 1 and count < k
//3.when tail != null do the reverse, and pre = cur, tail = pre.next, count = 1;
public ListNode reverseKGroup(ListNode head, int k) {
if(head == null || k == 1) return head;
ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode pre = dummy;
ListNode tail = head;
int count = 1;
while(tail != null){
count = 1;
while(tail != null && count < k){
tail = tail.next;
count++;
}
if(tail != null){
ListNode cur = pre.next;
reverse(cur, tail, pre);
pre = cur;
tail = pre.next;
}
}
return dummy.next;
}
public void reverse(ListNode node, ListNode tail, ListNode prev){
if(node == tail) return;
ListNode newHead = tail.next;
while(newHead != tail){
ListNode next = node.next;
node.next = newHead;
newHead = node;
node = next;
}
prev.next = newHead;
}
public static void main(String[] args){
LOJ25_ReverseNodesInKGroup reverser = new LOJ25_ReverseNodesInKGroup();
ListNode head = new ListNode(1);
head = reverser.reverseKGroup(head, 1);
ListNode.print(head);
}
}