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

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

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

用一个数组保存链表值,将数组翻转后的值传回链表
import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 * }
 */

public class Solution {
    /**
     * 
     * @param head ListNode类 
     * @param k int整型 
     * @return ListNode类
     */
    public ListNode reverseKGroup (ListNode head, int k) {
        // write code here
        ListNode temp = head;
        int len = 0;
        // 计算链表长度
        while(temp != null){
            len++;
            temp = temp.next;
        }
        // 定义数组存放链表节点值
        int[] num = new int[len];
        temp = head;
        int i = 0;
        while(temp != null){
            num[i++] = temp.val;
            temp = temp.next;
        }
        // 遍历链表
        for(int j = 0; j < len;){
            // 每k个进行翻转,最后不足k个直接结束
            if(j + k - 1 < len){
                merge(num, j , j + k - 1);
                j = j + k;
            }else{
                j = len;
            }
        }
        temp = head;
        int t = 0;
        // 遍历链表,将链表每个节点的值替换成翻转后对应数组的值
        while(temp != null){
            temp.val = num[t++];
            temp = temp.next;
        }
        return head;
    }
    // 翻转每k个为一组的数组
    public void merge(int[] num, int m, int n){
        while(m < n){
            int temp = num[m];
            num[m] = num[n];
            num[n] = temp;
            m++;
            n--;
        }
    }
}


全部评论

相关推荐

群星之怒:不是哥们,你就不好奇瘫痪三十年的老植物人是啥样的吗?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务