题解 | #链表中的节点每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) { //因为该链表会被分成多段,所以考虑到使用递归 //创建每段链表尾节点 ListNode tail = head; //因为是每k个一段,所以遍历k次则会得到每段的尾节点 for(int i=1; i<=k; i++){ //如果尾节点不存在,则说明最后一段长度不足k,则不需要反转 if(tail == null){ return head; } tail = tail.next;//这里执行完最后一次,tail其实指向该段尾节点的下一位 } System.out.println("tail===>"+tail); //对得到的[head, tail]段进行反转 //创建当前节点指针cur ListNode cur = head; //创建当前节点的前一个节点 ListNode pre = null; //创建next节点,用于保存当前节点的下一位 ListNode next = null; while(cur != tail){ //cur==tail说明已经到当前段tail的下一个 next = cur.next; cur.next = pre; pre = cur; cur = next; } //当跳出while后,则开始下一段的反转 head.next = reverseKGroup(tail, k); return pre; } }