Reverse Nodes in k-Group

来源:互联网 发布:网络培训班 编辑:程序博客网 时间:2024/06/15 10:33

这道题让自己做了很久,光是草稿纸画图,就用了3页。但我们觉得这是值得的!我们必须得有认真钻研的劲头,必须要搞得明明白白,不留死角。

当中颠倒顺序的做法同之前的模板有不同。

之前的是颠倒整个(子)list的顺序,不用考虑之后的链接。

而这个是颠倒list中间一部分的顺序,必须要考虑整个list的链接。

方法当中的prev和next是边界,不参与顺序颠倒,last是最开始要参与颠倒的节点,也是最后要返回的节点。


/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { val = x; } * } */public class Solution {    public ListNode reverseKGroup(ListNode head, int k) {        if (head == null || k <= 1) {            return head;        }        ListNode dummy = new ListNode(0);        ListNode node = head;        ListNode prev = dummy;        dummy.next = head;        int count = 0;        while (node != null) {            count++;            ListNode next = node.next;            if (count == k) {                prev = reverseNode(prev, next);                count = 0;            }            node = next;        }        return dummy.next;    }        private ListNode reverseNode(ListNode prev, ListNode next) {        ListNode last = prev.next;        ListNode cur = last.next;        while (cur != next) {            last.next = cur.next;            cur.next = prev.next;            prev.next = cur;            cur = last.next;        }        return last;    }    }




0 0
原创粉丝点击