leetcode-25-K个一组翻转链表

题目描述:

方法一:栈

class Solution {
    public ListNode reverseKGroup(ListNode head, int k) {
        Deque<ListNode> stack = new ArrayDeque<>();
        ListNode dummy = new ListNode(0);
        ListNode p = dummy;
        while(true){
            int count = 0;
            ListNode tmp = head;
            while(tmp != null && count <k){
                stack.add(tmp);
                tmp = tmp.next;
                count++;
            }
            if(count != k){
                p.next = head;
                break;
            }
            while(!stack.isEmpty()){
                p.next = stack.pollLast();
                p = p.next;
            }
            p.next = tmp;
            head = tmp;
        }
        return dummy.next;
    }
}

方法二:尾插法

class Solution {
    public ListNode reverseKGroup(ListNode head, int k) {
        ListNode dummy = new ListNode(0);
        dummy.next = head;
        ListNode pre = dummy;
        ListNode tail = dummy;
        while(true){
            int count = 0;
            while(tail != null && count !=k){
                count++;
                tail = tail.next;
            }
            if (tail == null) break;
            ListNode head1 = pre.next;
            while(pre.next != tail){
                ListNode cur = pre.next;
                pre.next = cur.next;
                cur.next = tail.next;
                tail.next = cur;
            }
            pre = head1;
            tail = head1;
        }
        return dummy.next;
    }
}

方法三:递归

class Solution {
    public ListNode reverseKGroup(ListNode head, int k) {
        ListNode cur = head;
        int count = 0;
        while (cur != null && count != k){
            cur = cur.next;
            count++;
        }
        if (count == k){
            cur = reverseKGroup(cur,k);
            while(count != 0){
                count--;
                ListNode tmp = head.next;
                head.next = cur;
                cur = head;
                head = tmp;
            }
            head = cur;
        }
        return head;
    }
}

 

posted @ 2020-05-16 18:48  oldby  阅读(125)  评论(0编辑  收藏  举报