查看: 883| 回复: 4
跳转到指定楼层
上一主题 下一主题
收起左侧

[学Java/C#] 109题求解。为何需要 pre 这个变量呢?

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
本帖最后由 zurich.hill 于 2020-8-24 05:06 编辑

代码如下,可以运行。为何需要 第21行 的 pre,我看了半天没有看懂。求解~
  1. class Solution {
  2.    
  3.     public TreeNode sortedListToBST(ListNode head) {
  4.    
  5.         if(head == null) return null;
  6.         
  7.         ListNode mid = this.findMid(head);
  8.         
  9.         TreeNode T = new TreeNode(mid.val);
  10.          
  11.         if(head == mid) return T;
  12.          
  13.         T.left = this.sortedListToBST(head);
  14.         T.right = this.sortedListToBST(mid.next);
  15.         
  16.         return T;
  17.     }
  18.    
  19.     public ListNode findMid(ListNode node){
  20.         
  21.         ListNode pre = null;
  22.         
  23.         ListNode slow_Ptr = node;
  24.         ListNode fast_Ptr = node;
  25.         
  26.         while(fast_Ptr!=null && fast_Ptr.next != null){
  27.             
  28.             pre = slow_Ptr;
  29.             
  30.             slow_Ptr = slow_Ptr.next;
  31.             fast_Ptr = fast_Ptr.next.next;
  32.             
  33.         }
  34.         
  35.         if(pre != null) pre.next = null;
  36.               
  37.         return slow_Ptr;
  38.     }     
  39. }
复制代码




上一篇:leetcode菜鸡刷题400打卡贴(菜鸡友好向小总结+流水账小总结)
下一篇:挺好一篇关于二分总结的文章
🔗
rongli 2020-8-24 06:55:11 来自APP | 只看该作者
全局:
把链表断开?
回复

使用道具 举报

🔗
zzgzzm 2020-8-24 10:21:50 来自APP | 只看该作者
全局:
这个pre的作用就是为了将原list从中间切开,即pre.next=null.

这样做的原因是只有这样才能将原问题转化为一个封闭的子问题(每次递归call sortedlisttobst只处理原list的一半)

注意当给定一个单链表head时,这里的默认终止节点就是next==null,必须利用这个才能找到mid node. 那么在构建子问题也必须严格保证所有原问题的假设。在这里后半个list自动保证终结;但前半个list只能手动“切断”。

这些特殊处理主要就是由于单链表的不对称性造成,即找下个节点易,但找前个节点难。这也是为什么面试中大部分链表都是单链表,而很少涉及双链表(那样就问题就不够有趣)

同时若该题扩展为sorted array to bst, 那么每次递归的函数参数就得同时给起止indexes, 而单链表只给head 就是因为tail的特征被“无情的”隐含了。
回复

使用道具 举报

🔗
zea7ot 2020-8-24 12:17:01 | 只看该作者
全局:
pre的作用体现在第35行
目的是把单向链表(从中间)打断

评分

参与人数 1大米 +1 收起 理由
zurich.hill + 1 欢迎分享你知道的情况,会给更多积分奖励!

查看全部评分

回复

使用道具 举报

🔗
 楼主| zurich.hill 2020-8-24 22:20:46 | 只看该作者
全局:
是的学习了。谢谢各位
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表