最全LeetCode -2074 -反转偶数长度组的节点 - java - 细喔,laravelrabbitmq面试题

总结

我们总是喜欢瞻仰大厂的大神们,但实际上大神也不过凡人,与菜鸟程序员相比,也就多花了几分心思,如果你再不努力,差距也只会越来越大。

面试题多多少少对于你接下来所要做的事肯定有点帮助,但我更希望你能透过面试题去总结自己的不足,以提高自己核心技术竞争力。每一次面试经历都是对你技术的扫盲,面试后的复盘总结效果是极好的!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

目的: 记录交换 链表偶数长度组 头节点 的 前驱节点。用于反转后,接回链表。

前面的搞定了,后面还需要一个节点变量来记录 链表偶数长度组 尾结点 的 后驱节点,用于反转后,接回链表。

且 等于 head

在这里插入图片描述

在这里插入图片描述


2. 循环遍历链表


但与往常有些不同

在这里插入图片描述

用的for循环,且循环条件就是 变量flag 必须为 0,也就是 tail 不能为 null,接着往后看就知道了。

为什么要这么写呢?因为 我们需要 下标来判断 进行分组 和判断该组是否为 偶数组,如果是那么就进行反转。

至于,为什么 i 初始值是1,是因为,我们都知道第一个分组,只有一个节点,肯定不是偶数组,

后面,我会利用节点个数 与 i 的关系,来让 prevHead 和 tail 进行移位,方便确定偶数组的头节点前驱 和 尾结点,


3. 循环内部代码步骤


3.1 创建 一个 prevHead 的 替身变量 reverseHead,没错顾名思义 就是记录反转偶数长度组 头节点的前驱节点,在定义一个 节点变量 reverseTail ,用来记录 偶数长度组尾巴节点的位置。另外,我们知道 偶数组的判断条件,就是 节点个位 偶数。所以,我们还需要创建一个整形变量count 来记录节点个数

在这里插入图片描述


下面重点了:我们要开始判断 该 “分组” 中的节点个数是否为偶数,通过 count 来判断。我们都都知道 count 初始值0,i 初始值1,零肯定是小于一的,那么肯定是能进入循环(注意 偶数长度组可能不止一个,所以我们肯定是需要一个循环的)

在这里插入图片描述

在分析之前该代码之前,该循环条件可以提前讲一下 tail != null 和 count < j 这两个条件中tail != null 是为了防止 后续 “分组” 时,剩余节点不够。

而 count < j 是用来分组的。后面分析的时候,你就知道哦了。

分析上图循环中的代码

在这里插入图片描述

再来接着看,反转函数的实现。(注意我们reverseHead 是 偶数组的前一个节点)

在这里插入图片描述

注意 头节点的前驱节点 与 该组的尾结点,都是在 prevHead 和 tail 移动前,记录了当前组头节点的前驱节点 和 该组的尾结点。所以,放心将该两个值,交给 reverse 。


接下来就是 反转方法 reverse 的实现

=====================================================================================

在这里插入图片描述


最后附上代码

=====================================================================


/**

 * Definition for singly-linked list.

 * public class ListNode {

 *     int val;

 *     ListNode next;

 *     ListNode() {}

 *     ListNode(int val) { this.val = val; }

 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }

 * }

 */

class Solution {

    public ListNode reverseEvenLengthGroups(ListNode head) {

        ListNode prevHead = new ListNode();

        prevHead.next = head;

        ListNode tail = head;

        int flag = 0;

        for(int i = 1; flag == 0;i++){

            ListNode reverseHead = prevHead;

            ListNode reverseTail = null;

            int count = 0;

            while(tail!=null && count < i){

                reverseTail =  tail;

                prevHead = prevHead.next;

                tail =tail.next;

                count++;

                if(tail == null){// 链表节点已分配完

                    flag = 1;

                }

            }

            if(count % 2 == 0){

                prevHead = reverse(reverseHead,reverseTail);

            }

        }

        return head;// 因为第一组是只有一节点,不用反转,也就是说 head 没有改变,直接返回就行了。

    }


## Kafka进阶篇知识点

![image](https://img-blog.csdnimg.cn/img_convert/215274e6436910175557aedbd8ba2bdd.webp?x-oss-process=image/format,png)

**Kafka**高级篇知识点

![image](https://img-blog.csdnimg.cn/img_convert/87543fc74d08a543d9e5f5644419e065.webp?x-oss-process=image/format,png)

**44个Kafka知识点(基础+进阶+高级)解析如下**

![image](https://img-blog.csdnimg.cn/img_convert/bba9093b821f22c18d4dafcaaa940e18.webp?x-oss-process=image/format,png)

由于篇幅有限,小编已将上面介绍的**《Kafka源码解析与实战》、Kafka面试专题解析、复习学习必备44个Kafka知识点(基础+进阶+高级)都整理成册,全部都是PDF文档**

> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**

**[需要这份系统化的资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**

**[需要这份系统化的资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

  • 18
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值