给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。

    k 是一个正整数,它的值小于或等于链表的长度。

    如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。

    进阶:

    你可以设计一个只使用常数额外空间的算法来解决此问题吗?
    你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。

    分析:本题在链表相关的题目中算是比较难的,而本题所采用的递归的方法进行实现:
    1.首先可以判断一下递归终止条件,即当链表长度不足k时,直接返回
    2.将k个链表进行翻转并输出
    3.递归,最后一个节点的下一个节点是递归后的返回值

    1. class Solution {
    2. public ListNode reverseKGroup(ListNode head, int k) {
    3. ListNode check=head;
    4. int canProceed = 0;
    5. while(canProceed<k && check!=null){
    6. check=check.next;
    7. canProceed++;
    8. }
    9. if(canProceed!=k) return head;
    10. ListNode pre=null,cur=head,next=head;
    11. int cnt=0;
    12. while(cnt<k&&cur!=null){
    13. next=cur.next;
    14. cur.next=pre;
    15. pre=cur;
    16. cur=next;
    17. cnt++;
    18. }
    19. if(next!=null){
    20. head.next=reverseKGroup(next,k);
    21. }
    22. return pre;
    23. }
    24. }