Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
如何判断两个链表是否相交?_创想鸟

如何判断两个链表是否相交?

判断两个链表是否相交,核心是检测节点内存地址是否相同,而非值相同。常用方法有两种:一是哈希集合法,遍历链表A将节点存入集合,再遍历链表B检查节点是否已存在,时间复杂度O(m+n),空间复杂度O(m);二是双指针法,先计算两链表长度并让长链表指针先走长度差步,再同步遍历直至指针相遇或为空,时间复杂度O(m+n),空间复杂度O(1)。双指针法更优,因无需额外空间。需注意边界情况:空链表不相交;尾节点不同则不相交;尾节点相同则必相交;交点可能在头节点或一链表为另一子链表。两种方法均基于节点身份比较,而非值比较,确保判断准确。

如何判断两个链表是否相交?

判断两个链表是否相交,核心在于它们是否共享同一个节点,而非仅仅节点的值相同。最常见且高效的方法有两种:一种是利用哈希集合(或称散列表)来记录遍历过的节点,另一种则是巧妙地运用双指针,在不使用额外空间的情况下找出交点。理解这两种方法,以及它们各自的优劣,对于解决这类链表问题至关重要。

解决方案

在我看来,解决链表相交问题,双指针法无疑是最为优雅且空间复杂度最优的方案。它不需要任何额外的存储空间,仅仅通过指针的移动就能找到答案。

这个方法的大致思路是这样的:假设我们有两个链表A和B。

计算长度并对齐:我们先分别遍历链表A和链表B,计算出它们的长度

lenA

和

lenB

。同时,在遍历到末尾时,我们还可以顺便检查一下它们的尾节点是否相同。如果

headA

的尾节点和

headB

的尾节点不同,那它们肯定不相交,直接返回

null

就行了。这个小技巧能帮我们快速排除掉很多不相交的情况,挺实用的。

如果尾节点相同,那它们就可能相交了。接下来,我们要让两个链表从“同一起跑线”开始遍历。找出两个链表的长度差

diff = abs(lenA - lenB)

。然后,让较长的那个链表的头指针先向前移动

diff

步。这样一来,两个链表的当前指针就和它们的交点(如果存在的话)保持了相同的距离。

同步遍历寻找交点:现在,两个指针(一个在链表A上,一个在链表B上)已经“对齐”了。我们让它们以相同的速度,一步一步地向前移动。在每次移动之后,都比较这两个指针指向的节点是否是同一个。一旦

pointerA == pointerB

,那么这个节点就是它们的第一个交点。我们直接返回这个节点。如果两个指针都走到了链表末尾(即都变成了

null

)还没相遇,那就说明它们虽然尾节点相同,但实际上并没有相交(这种情况通常不会发生,因为如果尾节点相同,它们必然会在某个地方相交)。但为了逻辑严谨,我们也可以在循环结束后返回

null

。

用伪代码来描述一下,大概是这样:

class ListNode:    def __init__(self, x):        self.val = x        self.next = Nonedef getIntersectionNode(headA: ListNode, headB: ListNode) -> ListNode:    if not headA or not headB:        return None    # 1. 计算长度并找到尾节点    currA, lenA = headA, 0    while currA.next:        currA = currA.next        lenA += 1    lenA += 1 # 加上最后一个节点    currB, lenB = headB, 0    while currB.next:        currB = currB.next        lenB += 1    lenB += 1 # 加上最后一个节点    # 如果尾节点不同,则不相交    if currA != currB:        return None    # 2. 对齐链表头    ptrA, ptrB = headA, headB    if lenA > lenB:        for _ in range(lenA - lenB):            ptrA = ptrA.next    elif lenB > lenA:        for _ in range(lenB - lenA):            ptrB = ptrB.next    # 3. 同步遍历寻找交点    while ptrA != ptrB:        ptrA = ptrA.next        ptrB = ptrB.next    return ptrA # 此时ptrA和ptrB指向同一个交点,或者都为None(如果一开始就相同)

这个方法的时间复杂度是 O(m+n),因为我们需要遍历两个链表两次(一次计算长度,一次寻找交点),但空间复杂度是 O(1),这是它最大的优势。

为什么不能仅仅通过节点的值来判断相交?

这个问题我记得刚接触链表的时候,就挺让我着迷的,也经常看到有朋友在这里犯迷糊。简单来说,判断链表是否相交,我们看的是它们是否共享“同一个物理节点”,也就是内存地址完全一致的那个对象,而不是仅仅节点里面存储的

val

值是不是一样。

想想看,如果两个链表各自有一个节点,它们的值都是

5

,但它们是两个完全独立的节点对象,在内存里占据不同的位置,那它们显然不能算作相交。相交的定义是,从某个节点开始,它们后面的所有节点都是一模一样的,就像两条路汇合成了一条路。如果只比较值,你可能会遇到两个完全独立的链表,它们有很多节点的值都碰巧一样,但它们从未真正“合并”过。

举个例子:链表A: 1 -> 2 -> 3链表B: 1 -> 2 -> 4

这里面,A和B都有值是1和2的节点。但它们是各自独立的节点。如果我们只看值,可能会误以为它们在1或2处相交了,但实际上并没有。它们是两条完全分开的路径。

所以,核心是“对象身份”的比较,而非“值”的比较。这也是为什么在代码里我们判断的是

ptrA == ptrB

,而不是

ptrA.val == ptrB.val

。搞清楚这一点,对于理解链表这种数据结构的本质,我觉得挺重要的。

链表相交的常见误区与边界情况

在处理链表相交问题时,除了前面提到的“只比较值”这个误区,还有一些边界情况和思路上的小陷阱,我觉得也值得聊聊。

空链表: 如果其中一个链表是空的(

headA

或

headB

为

null

),它们显然不可能相交。这时候直接返回

null

就行了。这是最简单的边界情况,但有时容易在写代码时漏掉。不相交但尾节点不同: 大多数不相交的链表,它们的尾节点也肯定是不同的。在这种情况下,我们前面双指针法里提到的“先检查尾节点”的优化就能派上用场了。如果尾节点不同,直接判断不相交,省去了后续的遍历。这算是一个小小的性能提升点。不相交但尾节点相同? 这个听起来有点矛盾,但实际上是不存在的。如果两个链表真的在某个点相交了,那么从那个交点往后,它们就是同一条链表了,自然它们的尾节点也必须是同一个。所以,如果尾节点不同,它们必然不相交;如果尾节点相同,它们必然相交。这个逻辑关系非常重要。相交在头节点: 有时候两个链表可能在它们的第一个节点就相交了,也就是

headA == headB

。这种情况下,我们的双指针法也能正确处理,因为它会直接在第一步就发现

ptrA == ptrB

并返回这个头节点。一个链表是另一个的子链表: 比如链表A是

1 -> 2 -> 3

,链表B是

2 -> 3

,并且B的头节点

2

就是A的第二个节点

2

。这种也算相交,并且交点就是

2

。我们的双指针法同样能正确识别。

理解这些边界情况,能帮助我们在设计算法时考虑得更周全,避免一些意想不到的bug。说到底,链表操作,细节决定成败。

空间换时间:哈希集合的策略

虽然我个人更偏爱双指针的优雅,但哈希集合(或者说用

Set

结构)来解决链表相交问题,在某些场景下,比如面试时想快速给出一个正确答案,或者对空间复杂度不那么敏感时,它是一个非常直观且易于实现的好方法。

它的核心思想很简单:

遍历并存储一个链表的所有节点:我们选择其中一个链表(比如链表A),从头开始遍历它。每遍历到一个节点,就把这个节点本身(也就是它的内存地址引用)存储到一个哈希集合里。哈希集合的特点就是查找效率非常高,通常是 O(1) 的平均时间复杂度。

遍历另一个链表并查找:接着,我们开始遍历另一个链表(比如链表B)。对于链表B的每一个节点,我们都去哈希集合里查询一下,看看这个节点是否已经存在。如果找到了,那恭喜你,这个节点就是两个链表的第一个交点。我们直接返回它。如果遍历完链表B的所有节点,都没有在哈希集合里找到任何一个节点,那就说明这两个链表不相交,返回

null

。

用伪代码表示:

def getIntersectionNodeWithHashSet(headA: ListNode, headB: ListNode) -> ListNode:    if not headA or not headB:        return None    visited_nodes = set() # 创建一个哈希集合    # 遍历链表A,将所有节点加入哈希集合    currA = headA    while currA:        visited_nodes.add(currA)        currA = currA.next    # 遍历链表B,查找是否存在于哈希集合中    currB = headB    while currB:        if currB in visited_nodes: # 如果找到,说明相交            return currB        currB = currB.next    return None # 遍历完B也没找到,说明不相交

优缺点分析:

优点:实现简单直观: 逻辑非常清晰,不容易出错。时间复杂度优秀: 同样是 O(m+n),因为需要遍历两个链表一次,哈希集合的插入和查找操作平均是 O(1)。缺点:空间复杂度较高: 需要额外的 O(m) 或 O(n) 空间来存储一个链表的所有节点。对于内存敏感的场景,这可能是一个问题。

所以,在选择解决方案时,如果对空间有严格要求,双指针法是首选;如果更看重代码的简洁性和开发效率,或者空间不是瓶颈,哈希集合法也是一个非常不错的选择。这两种方法各有千秋,理解它们背后的原理和适用场景,才能在实际问题中做出最合适的选择。

以上就是如何判断两个链表是否相交?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1370017.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
如何用Python进行网络编程(Socket)?
上一篇 2025年12月14日 10:09:57
如何在Keras回调函数中获取model.fit参数值
下一篇 2025年12月14日 10:10:15

相关推荐

  • 为什么苹果手机锁屏了还会亮

    为什么苹果手机锁屏了还会亮为什么苹果手机锁屏了还会亮为什么苹果手机锁屏了还会亮为什么苹果手机锁屏了还会亮

    苹果手机锁屏后仍会亮起的原因包括:息屏显示、抬腕唤醒、轻点唤醒、附近设备解锁和背景应用刷新。为了防止这种情况,用户可以禁用以下功能:息屏显示、抬腕唤醒、轻点唤醒、附近设备解锁和背景应用刷新。 苹果手机锁屏后为什么仍然会亮? 苹果手机锁屏后仍然会亮通常是因为以下原因之一: 1. 息屏显示功能 息屏显示…

    2026年9月25日 • 用户投稿
    200
  • 为什么苹果手机拍出来的照片发黄

    为什么苹果手机拍出来的照片发黄为什么苹果手机拍出来的照片发黄为什么苹果手机拍出来的照片发黄为什么苹果手机拍出来的照片发黄

    苹果手机照片发黄的原因有硬件因素(镜头镀膜氧化、色温传感器偏差)、软件因素(图像增强算法、色温设置)、环境因素(灯光环境、曝光不足)等。可通过校准色温、使用自然光、手动调整设置、使用第三方相机应用、后期处理等办法解决。 苹果手机照片发黄的原因 一、硬件因素 镜头镀膜氧化:随着时间的推移,镜头镀膜会氧…

    2026年9月24日 • 用户投稿
    100
  • 为什么有些SSD参数漂亮但实际体验却令人失望?

    为什么有些SSD参数漂亮但实际体验却令人失望?为什么有些SSD参数漂亮但实际体验却令人失望?为什么有些SSD参数漂亮但实际体验却令人失望?为什么有些SSD参数漂亮但实际体验却令人失望?

    SSD实际体验不佳的核心在于纸面参数仅反映理想条件下的峰值性能,而真实使用中受主控、闪存类型、SLC缓存耗尽、DRAM缓存缺失、固件优化不足及散热不良等因素影响,导致持续写入速度骤降、系统卡顿等问题。 很多时候,我们看着SSD产品页面上那些漂亮的顺序读写速度,比如几千MB/s,或者惊人的IOPS,心…

    2026年9月24日 • 用户投稿
    100
  • VSCode 怎样通过快捷键快速折叠所有代码块 VSCode 快速折叠所有代码块的快捷键方法​

    在vscode中一键折叠所有代码的快捷键是ctrl + k后按ctrl + 0(mac为cmd + k再按cmd + 0),该操作可将函数、类、条件语句等所有可折叠区域全部收起,帮助快速概览文件结构、提升阅读与定位效率;此外,还可使用ctrl + shift + [折叠当前代码块、ctrl + k,…

    2026年9月24日
    100
  • sublime怎么配置eslint_sublime ESLint插件配置教程

    sublime怎么配置eslint_sublime ESLint插件配置教程sublime怎么配置eslint_sublime ESLint插件配置教程sublime怎么配置eslint_sublime ESLint插件配置教程sublime怎么配置eslint_sublime ESLint插件配置教程

    首先安装Node.js和ESLint,通过npm全局或项目内安装并初始化配置;接着在Sublime Text中使用Package Control安装SublimeLinter及SublimeLinter-eslint插件;然后根据需要在设置中配置ESLint可执行文件路径;再添加”&#8…

    2026年9月24日 • 用户投稿
    100
  • Java双向链表:实现高效的按索引删除节点操作

    Java双向链表:实现高效的按索引删除节点操作Java双向链表:实现高效的按索引删除节点操作Java双向链表:实现高效的按索引删除节点操作Java双向链表:实现高效的按索引删除节点操作

    本文详细讲解了如何在Java中为双向链表实现按索引删除节点的操作。教程涵盖了泛型设计、节点结构、参数校验、以及针对头节点、尾节点和中间节点的删除逻辑,并强调了维护链表head、tail和size等状态的准确性,确保了删除操作的健壮性和正确性。 1. 双向链表节点与泛型设计 在实现双向链表时,为了提高…

    2026年9月24日 • 用户投稿
    200
  • Java 双向链表指定索引节点删除深度解析

    Java 双向链表指定索引节点删除深度解析Java 双向链表指定索引节点删除深度解析Java 双向链表指定索引节点删除深度解析Java 双向链表指定索引节点删除深度解析

    本文深入探讨了在 Java 中实现双向链表指定索引节点删除的完整过程。我们将详细讲解如何处理泛型化、头尾指针维护、链表大小更新以及各种边界条件(如删除头节点、尾节点、中间节点或唯一节点)的逻辑,并提供一个健壮的实现示例。 1. 双向链表基础与泛型化 双向链表是一种数据结构,其中每个节点不仅包含数据,…

    2026年9月24日 • 用户投稿
    100
  • 在Spring Boot中利用注解实现字符串到枚举的灵活转换

    在Spring Boot中利用注解实现字符串到枚举的灵活转换在Spring Boot中利用注解实现字符串到枚举的灵活转换在Spring Boot中利用注解实现字符串到枚举的灵活转换在Spring Boot中利用注解实现字符串到枚举的灵活转换

    本文详细介绍了在Spring Boot应用中,如何通过自定义Jackson反序列化器并结合@JsonDeserialize注解,实现请求体中字符串类型数据向枚举(Enum)对象的自动转换。该方法尤其适用于处理大小写不敏感的字符串输入,确保数据模型与业务逻辑的健壮性与灵活性。 背景与问题描述 在spr…

    2026年9月24日 • 用户投稿
    700
  • 抖音店铺层级从低到高怎么设置?抖音怎么创建店铺位置

    抖音电商逐渐崛起,成为众多商家争相入驻的舞台。抖音店铺层级设置作为商家在抖音平台上的重要环节,直接影响着店铺的运营效果和品牌形象。本文将从低到高详细解析抖音店铺层级设置,帮助商家打造优质电商品牌。 一、抖音店铺层级概述 抖音店铺层级分为五个等级,从低到高依次为:新手店铺、成长店铺、成熟店铺、优质店铺…

    2026年9月24日
    1300
  • 散热系统的设计如何影响高端硬件的长期稳定性?

    散热系统的设计如何影响高端硬件的长期稳定性?散热系统的设计如何影响高端硬件的长期稳定性?散热系统的设计如何影响高端硬件的长期稳定性?散热系统的设计如何影响高端硬件的长期稳定性?

    散热系统设计直接决定高端硬件的长期稳定性,优良设计可有效控制温度、抑制热点、减少热应力损伤,从而延缓性能衰减、提升可靠性;反之则加速老化、引发故障。高性能计算因持续高负载对散热更敏感,要求温度稳定以保障运算精度与连续性。液体冷却凭借高效导热和低噪优势成为高端配置主流,但存在成本高、复杂性强及漏液风险…

    2026年9月24日 • 用户投稿
    1100
  • UC浏览器为什么不能复制文字_UC浏览器无法复制文字问题解决方法

    UC浏览器为什么不能复制文字_UC浏览器无法复制文字问题解决方法UC浏览器为什么不能复制文字_UC浏览器无法复制文字问题解决方法UC浏览器为什么不能复制文字_UC浏览器无法复制文字问题解决方法UC浏览器为什么不能复制文字_UC浏览器无法复制文字问题解决方法

    无法复制文字可能是因网页保护或浏览器设置所致。首先检查是否启用内容保护,尝试切换至电脑版浏览;其次关闭UC浏览器的阅读模式以恢复原文选中功能;接着清除浏览器缓存数据,重启后测试复制功能;若仍无效,可开启无障碍服务如屏幕朗读或OCR识别提取文字;最后可通过分享链接到微信等应用,在其他浏览器中打开并复制…

    2026年9月24日 • 用户投稿
    1400
  • 电竞显示器里的HDR功能是鸡肋吗?

    电竞显示器里的HDR功能是鸡肋吗?电竞显示器里的HDR功能是鸡肋吗?电竞显示器里的HDR功能是鸡肋吗?电竞显示器里的HDR功能是鸡肋吗?

    HDR在电竞显示器中并非完全鸡肋,但实用性受限。它能提升3A大作和影音的画质,让亮暗细节更丰富、色彩更真实;然而在《CS2》《英雄联盟》等主流电竞游戏中作用有限,因这类游戏更依赖高刷新率与响应速度。许多电竞屏仅支持HDR400,亮度不足且无分区背光,易导致泛白、失真,实为“伪HDR”。真正有意义的H…

    2026年9月24日 • 用户投稿
    200
  • 如何用豆包 AI 大模型与 AI 聚会游戏设计工具结合,活跃聚会氛围?​

    如何用豆包 AI 大模型与 AI 聚会游戏设计工具结合,活跃聚会氛围?​如何用豆包 AI 大模型与 AI 聚会游戏设计工具结合,活跃聚会氛围?​如何用豆包 AI 大模型与 AI 聚会游戏设计工具结合,活跃聚会氛围?​如何用豆包 AI 大模型与 AI 聚会游戏设计工具结合,活跃聚会氛围?​

    豆包 ai 大模型与 ai 聚会游戏设计工具结合,能有效提升聚会互动性和趣味性。1. 可用豆包 ai 生成个性化问题或话题,如搞笑类、回忆类等,帮助破冰交流;2. 结合聚会游戏工具,利用 ai 生成的关键词或背景设定定制专属小游戏,增强即兴互动;3. 借 ai 生成角色设定和剧情线索,营造角色扮演氛…

    2026年9月24日 • 用户投稿
    100
  • 多模态AI如何处理射电望远镜数据 多模态AI深空探测应用

    多模态AI如何处理射电望远镜数据 多模态AI深空探测应用多模态AI如何处理射电望远镜数据 多模态AI深空探测应用多模态AI如何处理射电望远镜数据 多模态AI深空探测应用多模态AI如何处理射电望远镜数据 多模态AI深空探测应用

    多模态ai通过融合多种数据提升射电望远镜数据分析能力。它将无线电信号转化为频谱图、时间序列等形式,并结合光学图像等信息综合判断信号频率、强度、出现时间与方向;1.时空对齐匹配不同设备数据;2.特征级融合提取关键特征;3.决策级融合综合多个模型结果;实际应用于“突破聆听计划”筛选射电信号,面临数据格式…

    2026年9月24日 • 用户投稿
    300
  • sublime怎么在侧边栏隐藏某些文件_sublime过滤隐藏文件设置方法

    sublime怎么在侧边栏隐藏某些文件_sublime过滤隐藏文件设置方法sublime怎么在侧边栏隐藏某些文件_sublime过滤隐藏文件设置方法sublime怎么在侧边栏隐藏某些文件_sublime过滤隐藏文件设置方法sublime怎么在侧边栏隐藏某些文件_sublime过滤隐藏文件设置方法

    可通过项目或全局设置隐藏Sublime Text侧边栏文件。在项目配置中添加”folder_exclude_patterns”和”file_exclude_patterns”可过滤指定文件夹和文件,如.git、node_modules及.log等;2.…

    2026年9月24日 • 用户投稿
    100
  • sublime怎么配置TypeScript自动编译_sublime集成TypeScript编译环境步骤

    sublime怎么配置TypeScript自动编译_sublime集成TypeScript编译环境步骤sublime怎么配置TypeScript自动编译_sublime集成TypeScript编译环境步骤sublime怎么配置TypeScript自动编译_sublime集成TypeScript编译环境步骤sublime怎么配置TypeScript自动编译_sublime集成TypeScript编译环境步骤

    首先安装Node.js和TypeScript,再在Sublime Text中创建自定义构建系统:1. 通过npm全局安装TypeScript并验证版本;2. 在Sublime中新建Build System,配置tsc编译命令、文件匹配规则及工作目录;3. 保存为TypeScript.sublime-…

    2026年9月24日 • 用户投稿
    000
  • sublime怎么配置js prettier自动格式化_Sublime集成Prettier实现JS代码自动格式化

    sublime怎么配置js prettier自动格式化_Sublime集成Prettier实现JS代码自动格式化sublime怎么配置js prettier自动格式化_Sublime集成Prettier实现JS代码自动格式化sublime怎么配置js prettier自动格式化_Sublime集成Prettier实现JS代码自动格式化sublime怎么配置js prettier自动格式化_Sublime集成Prettier实现JS代码自动格式化

    首先安装Node.js和Prettier,再通过Package Control安装JsPrettier插件,配置prettier_cli_path、node_path及auto_format_on_save为true,确保保存时自动格式化JS代码。 Sublime Text 虽然轻量,但通过插件可以…

    2026年9月24日 • 用户投稿
    800
  • 荣耀V系列手机微信收款语音怎么设置?快速配置支付播报指南

    答案:设置微信收款语音播报需先在微信“收付款”中开启“收款到账语音提醒”,再确保荣耀V系列手机的媒体音量正常、通知权限开启、关闭勿扰模式、允许微信后台运行,并检查通知通道和网络连接,才能保障语音提醒正常播放。 荣耀V系列手机设置微信收款语音播报,核心在于微信应用内部的“收款到账语音提醒”功能,并确保…

    2026年9月24日
    300
  • 为什么GPU显存带宽比容量更重要?

    显存带宽比容量更重要,因其直接决定数据传输速度,影响GPU计算单元的利用率。在AI训练和高分辨率渲染中,高带宽可避免“数据饥饿”,确保海量数据高效流转,而HBM技术凭借3D堆叠和宽接口提供远超GDDR的带宽,成为高性能计算的关键。 GPU显存带宽比容量更重要,核心在于现代GPU的工作模式和其处理的数…

    2026年9月24日
    200
  • iPhone14微信收款语音播报怎么设置?详细教程助你配置语音功能

    iPhone14微信收款语音播报怎么设置?详细教程助你配置语音功能iPhone14微信收款语音播报怎么设置?详细教程助你配置语音功能iPhone14微信收款语音播报怎么设置?详细教程助你配置语音功能iPhone14微信收款语音播报怎么设置?详细教程助你配置语音功能

    要让iPhone 14微信收款语音播报正常工作,需确保微信内开启“收款到账语音提醒”,同时在系统设置中允许微信通知并开启声音,检查手机未处于静音或勿扰模式,保持微信更新并重启设备以排除缓存问题。 要在iPhone 14上设置微信收款语音播报,最关键的其实是确保微信应用内部的通知设置和手机系统层面的通…

    2026年9月24日 • 用户投稿
    700

发表回复

登录后才能评论
关注微信