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

海康威视公司福利 1382人发布