题解 | #链表中的节点每k个一组翻转#

链表中的节点每k个一组翻转

http://www.nowcoder.com/practice/b49c3dc907814e9bbfa8437c251b028e

解题思路:

递归法

  • 递归参数,剩余的链表节点和参数k
  • 递归终止条件
  1. 如果当前链表的头节点为空 则返回null。
  2. 如果当前链表的头节点不为空,则依次对每个节点反转链表。 这时可能有两种情况:
    • 如果反转完链表发现当前链表节点数量小于k,则再次反转链, 返回值为当前节点的头节点。
    • 如果当前链表节点数量大于等于k,则反转完k个链表之后,继续递归剩余的链表,并且当前返回值为本次反转链表之后的的第一个节点。

JAVA代码实现如下:

import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 * }
 */
public class Solution {
    public ListNode reverseKGroup (ListNode head, int k) {
        // write code here
        if(head==null)return null;
        ListNode p=head;
        ListNode pre=null;
        int count=1;//遍历过的节点数
        while(p!=null){
            ListNode node=p.next;
            p.next=pre;
            pre=p;
            p=node;
            count++;
            if(count-1==k)//减1是因为当前节点即第count个节点为下一个区间链表的头节点。
                break;
        }
        if(count-1<k){//count减1小于k说明最后剩余的节点个数小于k(不然上面的while循环不会停止)
            while(pre!=head){
                ListNode node=pre.next;
                pre.next=p;
                p=pre;
                pre=node;
            }
          return pre;
        }
        head.next=reverseKGroup(p,k);
        return pre;
    }
}
全部评论

相关推荐

轻絵梨花泪沾衣:南泵,大少爷驾到通通闪开
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务