题解 | #链表中的节点每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;
    }
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-09 12:02
ssob上原来真有BOSS啊
硫蛋蛋:这种也是打工的,只不是是给写字楼房东打工
点赞 评论 收藏
分享
07-09 18:28
门头沟学院 Java
写着提前批,结果还要实习4个月以上???
程序员牛肉:这种不用看,直接投了,面试的时候问对应的HR就行。有可能他们是直接复制的暑期实习的模板。
点赞 评论 收藏
分享
晗江雪:其实我只是觉得你们导员说的很好笑
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-07 13:35
虽然不怎么光彩,经过这件事,可能我真的要去认同“面试八股文早该淘汰!不会用AI作弊的程序员=新时代文盲!”这句话了
HellowordX:Ai的出现是解放劳动力的,不是用来破坏公平竞争环境的,这样下去,轻则取消所有线上面试,严重了会影响整个行业对所有人产生影响,企业会拉高入职考核各种离谱考核会层出不穷
你找工作的时候用AI吗?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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