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

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

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

这个题的前置条件是要熟练掌握链表反转

import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 *   public ListNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param head ListNode类 
     * @param k int整型 
     * @return ListNode类
     */
    public ListNode reverseKGroup (ListNode head, int k) {
	  //使用递归的设计思想每次只翻转一部分剩下的部分交给下次递归
        // 初始判断如果k=1直接返回
        if(k==1||head==null||head.next==null){
            return head;
        }
	  
        ListNode node=head;
	  //判断是否满足翻转需求如果不能就直接返回头部
        for(int i=0;i<k;i++){
            if(head==null){
                return node;
            }
            head=head.next;
        }
        head=node;
        // 初始化节点
        ListNode pre=new ListNode(-1),cur,res,temp;
        pre.next=head;
        cur=head.next;
        res=head;
	  
       //对需要的部分进行翻转第一个不用动需要翻转剩下的k-1
       for(int i=0;i<k-1;i++){
            temp=cur.next;
            cur.next=pre.next;
            pre.next=cur;
            cur=temp;
       }
	 //将翻转后的部分与后续部分进行拼接
        res.next=reverseKGroup(cur,k);
        return pre.next;
    }
}

全部评论

相关推荐

10-13 13:49
南京大学 财务
饿魔:笑死我了,你简直是个天才
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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