题解 | #链表中的节点每k个一组翻转#

链表中的节点每k个一组翻转

http://www.nowcoder.com/practice/b49c3dc907814e9bbfa8437c251b028e

断开,反转,链接

    public ListNode reverseKGroup (ListNode head, int k) {
        ListNode hair=new ListNode(-1);
        hair.next=head;
        ListNode pre=hair;
        ListNode start=null;
        ListNode end=null;
        ListNode tmp=null;
        while(true){
            end=pre;
            for(int i=0;i<k;i++){//end往后移动k次,从start到end共k个要翻转的节点。不足的话就直接返回链表了。
                end=end.next;
                if(end==null)return hair.next;
            }
            tmp=end.next;//挂载end后的节点
            end.next=null;//断开链表,下面反转的时候只反转start到end的部分         
            start=pre.next;
            pre.next=reverse(start);//反转完start在最后,end在最前

            start.next=tmp;//把链表再连起来
            pre=start;//下一轮准备开始
        }        
    }
    public ListNode reverse(ListNode head){
        ListNode pre=null;
        ListNode cru=head;
        ListNode tmp=null;
        while(cru!=null){
            tmp=cru.next;
            cru.next=pre;
            pre=cru;
            cru=tmp;
        }
        return pre;
    }
全部评论

相关推荐

点赞 评论 收藏
分享
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务