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

[CareerCup] 链表去重,我自己写的极简版,有点小问题

全局:

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

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

x
本帖最后由 TonyJang 于 2014-9-21 21:20 编辑
  1. package chapter2;

  2. import java.util.*;
  3. public class removeDup{
  4. public static LinkedList<Integer> removeDup(LinkedList<Integer> list){

  5. HashSet<Integer> set=new HashSet<Integer>();
  6. ListIterator<Integer> it= list.listIterator();


  7. while(it.hasNext()){
  8.         if(set.contains(it.next())){
  9.                
  10.                 it.remove();
  11.         }else{
  12.                
  13.                 set.add(it.previous());
  14.                 it.next();
  15.                
  16.         }
  17.         
  18.         
  19. }
  20. return list;        
  21. }





  22. public static void main(String[] args){
  23.         
  24.         LinkedList<Integer> list=new LinkedList<Integer>();
  25.         
  26.         list.add(2);
  27.         list.add(7);
  28.         list.add(3);
  29.         list.add(8);
  30.         list.add(1);
  31.         list.add(2);
  32.         list.add(3);
  33.         
  34.         System.out.println(removeDup(list).toString());
  35.         
  36.         
  37. }

  38. }
复制代码
我想用java自带的Linkedlist类,这样简洁一些,但是运行有错误,很简单的一个问题都错了,还不知道错在哪儿,太打击人了。。。

另外再问一下,大家平时写链表的题目用java自带的linkedlist类吗?我看地里很多大牛都是Node->LinkedList自己构造的


上一篇:我的这段很简单的反转链表哪里错了?
下一篇:移动链表元素和数组开销不一样吗》
推荐
chitose 2014-9-21 23:23:01 | 只看该作者
全局:
本帖最后由 hakase 于 2014-9-21 23:32 编辑

如果用java自带的数据结构整个程序就三句话:
Set<Integer> aSet = new HashSet<Integer>(list);
list.clear();
list.addAll(aSet);
我要是面试官直接要求结束面试。
人家是考你算法。
对于这道题明显是考数据结构中的基本操作。用Java自带的数据结构就不合适了。
另外,错的地方是使用iterator进行遍历的时候不能对这个list进行删除、添加操作。

评分

参与人数 3大米 +18 收起 理由
TonyJang + 3 回答的很好!
Kimurate + 5 2333
爱丽丝和鲍勃 + 10

查看全部评分

回复

使用道具 举报

推荐
chitose 2014-9-22 21:58:18 | 只看该作者
全局:
本帖最后由 hakase 于 2014-9-22 22:06 编辑
TonyJang 发表于 2014-9-22 08:53
不过,使用iterator进行遍历的时候不能对这个list进行删除、添加操作是可以的吧,我看了API没发现有啥问 ...

你说得对,是我错了。卖个萌遮羞脸根据Java Secure Coding 有这么一条:https://www.securecoding.cert.or ... tion+is+in+progress
据说遍历器没有结束遍历之前修改collection里面的内容会造成一些“未定义”的行为。
回复

使用道具 举报

全局:
不要用自带的数据结构。。。
回复

使用道具 举报

🔗
 楼主| TonyJang 2014-9-21 22:21:21 | 只看该作者
全局:
billyli8866 发表于 2014-9-21 21:52
不要用自带的数据结构。。。

为啥啊?自己写不麻烦吗?
回复

使用道具 举报

🔗
 楼主| TonyJang 2014-9-22 08:48:01 | 只看该作者
全局:
hakase 发表于 2014-9-21 23:23
如果用java自带的数据结构整个程序就三句话:
Set aSet = new HashSet(list);
list.clear();

大牛说的是啊!本菜转行初期,只觉得这样方便点,另外工作中这样可以吧?
回复

使用道具 举报

🔗
 楼主| TonyJang 2014-9-22 08:53:06 | 只看该作者
全局:
hakase 发表于 2014-9-21 23:23
如果用java自带的数据结构整个程序就三句话:
Set aSet = new HashSet(list);
list.clear();

不过,使用iterator进行遍历的时候不能对这个list进行删除、添加操作是可以的吧,我看了API没发现有啥问题啊http://tool.oschina.net/apidocs/apidoc?api=jdk_7u4
回复

使用道具 举报

🔗
tbu 2014-9-22 09:58:30 | 只看该作者
全局:
本地运行你的代码没错,但如果你说的是leetcode上报错的话那肯定了啊,
因为leetcode给的都是自己写的ListNode类,是没有iterator的。。。。而且参数类型肯定也incomparable。。。。
回复

使用道具 举报

🔗
sqzhang17 2014-9-23 06:29:39 | 只看该作者
全局:
一般来说在面试的时候要是考linkedlist的题~一般默认的都是single linked list~这样会让面试官更容易的了解你对linked list 的了解~
当然~问一下也没有问题~

回复

使用道具 举报

🔗
 楼主| TonyJang 2014-9-23 09:45:38 | 只看该作者
全局:
sqzhang17 发表于 2014-9-23 06:29
一般来说在面试的时候要是考linkedlist的题~一般默认的都是single linked list~这样会让面试官更容易的了解 ...

不过还是要自己写Node.java,不能用java.util.*
回复

使用道具 举报

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

本版积分规则

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