题解 | #牛群的重新分组#
牛群的重新分组
https://www.nowcoder.com/practice/267c0deb9a6a41e4bdeb1b2addc64c93
知识点:链表 模拟
思路:中规中矩的遍历模拟k组翻转;数据使用栈来存储即可;一个小技巧,最后的个数不好判断,可以看我这个思路,直接判断栈是否为空(这里容易忽略一个情况,就是k等于链表长度),根据栈是否空,然后最后直接拼接直接标记的节点flag
编程语言:java
如果我的思路启发了你,给个小小关注吧~
我是废江,一个从java跑到内核再准备润回java的打工人,我会持续分享从linux内核到上层java微服务等干货
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类 */ // write code here public ListNode reverseKGroup (ListNode head, int k) { // write code here int i; ListNode cur = head; ListNode tmp = new ListNode(-1); ListNode hhead = tmp; ListNode flag = null;//标记 Stack<Integer> stack = new Stack<>(); while (cur != null) { flag = cur;//标记 for (i = 0; i < k && cur != null; i++) { stack.push(cur.val); cur = cur.next; } if(cur == null && i != k) break; for (i = 0; i < k; i++) { ListNode p = new ListNode(stack.pop()); p.next = null; tmp.next = p; tmp = p; } } //处理剩下的栈,如果为空,则刚好;不为空,则不足,顺序拼接,利用上之前的flag if (!stack.isEmpty()) tmp.next = flag; return hhead.next; } }