题解 | #链表中的节点每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;
}
}
凡岛公司福利 360人发布