题解 | #链表中的节点每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) {
        if (head == null || head.next == null || k <= 1) {
            return head;
        }
        ListNode dummy = new ListNode(0);
        dummy.next = head;
        ListNode tmp = dummy;
        ListNode cur = head;
        //创建一个队列用于保存符合条件的,然后将符合的值传递给栈,实现反转
        Stack<ListNode> stack = new Stack<>();
        Queue<ListNode> queue = new LinkedList<>();
        while (cur != null) {
            queue.add(cur);
            cur = cur.next;
            if (queue.size() == k) {
			  //满足k个,进行传递然后反转
                while (!queue.isEmpty()) {
                    stack.push(queue.poll());
                }
                while (!stack.isEmpty()) {
                    tmp.next = stack.pop();
                    tmp = tmp.next;
                }
            }
        }
	  //为了防止最后有节点未添加
        while (!queue.isEmpty()) {
            tmp.next = queue.poll();
            tmp = tmp.next;
        }
	  //最后节点一定要置空
        tmp.next = null;
        return dummy.next;
    }
}

全部评论

相关推荐

11-14 16:15
已编辑
湖南工业大学 Java
点赞 评论 收藏
分享
程序员牛肉:可以说含金量不如王者荣耀省标。
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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