题解 | #链表中的节点每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;
    }
全部评论

相关推荐

怎么起名字:早知道就不读书了,害得我送外卖还得扶眼镜
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-11 11:29
点赞 评论 收藏
分享
06-26 22:20
门头沟学院 Java
码农索隆:让你把简历发给她,她说一些套话,然后让你加一个人,说这个人给你改简历,然后开始卖课
我的求职精神状态
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务