题解 | #链表中的节点每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) {
        //创建一个当前指针
        ListNode cur=head;
        //创建一个指针记录反转的起始位置
        ListNode star;
        //创建一个集合存要反转的节点
        LinkedList<Integer> list=new LinkedList<>();
        //反转区间索引
        int i=1;
        //遍历链表
        while(cur!=null){
            // 记录反转区间的起始位置
            star=cur;
            //用list取反转区间的值
            while(i<=k){
                //如果这组节点小于k则不做反转直接返回链表
                if(cur==null){
                    return head;
                }
                list.add(cur.val);
                cur=cur.next;
                i++;
                System.out.println("i:"+i);
            }
            //集合反转
            Collections.reverse(list);
            //将当前指针指向到反转区间开始的位置
            cur=star;
            //将反转后的集合值赋回给对应节点的val
            for(int j=0;j<list.size();j++){
                cur.val=list.get(j);
                System.out.println("cur.val:"+cur.val);
                cur=cur.next;
            }
            //重置集合
            list.clear();
            //重置反转区间索引
            i=1;
        }
        return head;
    }
}

全部评论

相关推荐

11-03 12:40
中山大学 Java
勇敢的突尼斯海怪选钝...:楼主这拒意向话术好得体呀 !求问HR回复态度咋样呀
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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