📣 VIP通行证夏日特惠 限时立减$68
查看: 1258| 回复: 7
跳转到指定楼层
上一主题 下一主题
收起左侧

[Leetcode] 147. Insertion Sort List

全局:

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

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

x
请教一下,为什么ListNode pre = res;这行必须放在大while loop之内
  1. public ListNode insertionSortList(ListNode head) {
  2.         if (head == null || head.next == null) return head;
  3.         ListNode res = new ListNode(-1);
  4.         ListNode cur = head;
  5.         while(cur != null){
  6.             ListNode pre = res;
  7.             ListNode next = cur.next;
  8.             while(pre.next != null && pre.next.val <= cur.val){
  9.                 pre = pre.next;
  10.             }
  11.             //otherwise insertion (swap)
  12.             cur.next = pre.next;
  13.             pre.next = cur;
  14.             cur = next;
  15.         }
  16.         return res.next;
  17.     }
复制代码

评分

参与人数 1大米 +1 收起 理由
Gullgosse + 1 给你点个赞!

查看全部评分


上一篇:一个多态,抽象,和接口的问题
下一篇:求一起刷题的小伙伴
🔗
PoJen 2020-4-9 03:19:49 | 只看该作者
全局:
ListNode pre = res; 這一行的意義是,每次要 insert cur 到 res list 中,都必須從 res list 的頭開始比較。你當然也可以在迴圈外宣告 pre,但每一圈還是得做 pre = res;

  1. /**
  2. * Definition for singly-linked list.
  3. * public class ListNode {
  4. *     int val;
  5. *     ListNode next;
  6. *     ListNode(int x) { val = x; }
  7. * }
  8. */
  9. class Solution {
  10.     public ListNode insertionSortList(ListNode head) {
  11.         if (head == null || head.next == null) return head;
  12.         ListNode res = new ListNode(-1);
  13.         ListNode cur = head;
  14.         ListNode pre;
  15.         
  16.         while(cur != null){
  17.             pre = res;
  18.             ListNode next = cur.next;
  19.             
  20.             while(pre.next != null && pre.next.val <= cur.val){
  21.                 pre = pre.next;
  22.             }
  23.             
  24.             //otherwise insertion (swap)
  25.             cur.next = pre.next;
  26.             pre.next = cur;
  27.             cur = next;
  28.         }
  29.         return res.next;
  30.     }
  31. }
复制代码


不確定這有沒有回答到你的問題。

评分

参与人数 1大米 +1 收起 理由
小水 + 1 很有用的信息!

查看全部评分

回复

使用道具 举报

🔗
 楼主| 小水 2020-4-9 12:40:57 | 只看该作者
全局:
PoJen 发表于 2020-4-9 03:19
ListNode pre = res; 這一行的意義是,每次要 insert cur 到 res list 中,都必須從 res list 的頭開始比較 ...

谢谢解答!还有一点不明白的是,为什么每次while循环都得从res list的头开始比较,而不是接着上一层的pre进行比较
回复

使用道具 举报

🔗
PoJen 2020-4-9 13:42:27 | 只看该作者
全局:
用下面提供的這個範例;2 -> 4 -> 1,假設每次都接著上一次迴圈的 pre 進行比較,就會得到下面的錯誤結果:



你也可以自己照這個範例走過一遍,就能想明白,如果你照著上一層的 pre 繼續比較,你永遠也沒辦法把 1 放到 2 的前面。

我有上 leetcode 實測過上面的範例,注意 pre = res 在迴圈外:

评分

参与人数 1大米 +1 收起 理由
小水 + 1 给你点个赞!

查看全部评分

回复

使用道具 举报

🔗
 楼主| 小水 2020-4-10 02:21:19 | 只看该作者
全局:
好详细的解释,太感谢了!好想给你多加些米,可惜每次只能加一颗
回复

使用道具 举报

🔗
PoJen 2020-4-10 02:32:58 | 只看该作者
全局:
哈謝謝樓主,沒關係,剛好有點空,舉手之勞

评分

参与人数 1大米 +1 收起 理由
小水 + 1 给你点个赞!

查看全部评分

回复

使用道具 举报

🔗
Gullgosse 2020-5-1 13:51:10 | 只看该作者
全局:
hello~ 之前看帖子,你好像有一起报名udacity 的 java developer 课程。 如果有的话,可以分享下吗?我可以分担下学费。官网报不了了,谢谢🙏
回复

使用道具 举报

🔗
 楼主| 小水 2020-5-1 23:59:53 | 只看该作者
全局:
Gullgosse 发表于 2020-5-1 13:51
hello~ 之前看帖子,你好像有一起报名udacity 的 java developer 课程。 如果有的话,可以分享下吗?我可以 ...

Hello, 我最后也没上那个课程,课程一直处于升级状态,没开课。

评分

参与人数 1大米 +1 收起 理由
Gullgosse + 1 好的,谢谢呀

查看全部评分

回复

使用道具 举报

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

本版积分规则

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