Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Solution {
- public ListNode reverseKGroup(ListNode head, int k) {
- if(head == null)
- return null;
- this.k = k;
- this.next = head;
- Split p = nextSplit();
- ListNode result = p.head;
- while(hasNext()){
- Split s = nextSplit();
- p.end.next = s.head;
- p = s;
- }
- return result;
- }
- int k;
- ListNode next;
- boolean hasNext(){
- return next != null;
- }
- Split nextSplit(){
- ListNode n = next;
- int i = 1;
- while(n.next != null && i < k){
- n = n.next; ++i;
- }
- Split s = new Split(next, n);
- next = n.next;
- n.next = null;
- if(i == k)
- reverse(s);
- return s;
- }
- void reverse(Split s){
- if(s.head == s.end)
- return;
- ListNode p = s.head;
- ListNode n = p.next;
- while(n != s.end) {
- ListNode t = n.next;
- n.next = p;
- p = n;
- n = t;
- }
- n.next = p;
- ListNode t = s.head;
- s.head = s.end;
- s.end = t;
- s.end.next = null;
- }
- class Split{
- ListNode head, end;
- Split(ListNode head, ListNode tail){
- this.head = head;
- this.end = tail;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement