Reverse Nodes in k-Group

来源:互联网 发布:网络用户的行为分析 编辑:程序博客网 时间:2024/06/02 02:04
/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { *         val = x; *         next = null; *     } * } */public class Solution {    public ListNode reverseKGroup(ListNode head, int k) {        if(head == null || k == 1) {              return head;          }          ListNode dummy = new ListNode(0);          dummy.next = head;          ListNode prev = dummy, end = head;          while(end != null) {            for(int i = 1; i < k && end != null; i++) {                end = end.next;            }            if(end == null) {                break;            }            prev = reverseK(prev, prev.next, end);            end = prev.next;        }          return dummy.next;      }        // Reverses prev + [start, end]    // Returns tail after reversion    private ListNode reverseK(ListNode prev, ListNode start, ListNode end) {        ListNode curr = start, next = curr.next;        ListNode endNext = end.next;        while(curr != end) {            start.next = next.next;            prev.next = next;            next.next = curr;            next = start.next;            curr = prev.next;        }        start.next = endNext;        return start;    }}


Time: O(n)

Space: O(1)

0 0