面试题9 不使用额外的 buffer 删除单向链表中的重复项

题目: 不使用额外的 buffer 删除一个单向链表中重复的项目

思路: 因为是单向链表 又不能使用额外的 buffer, 所以其实只有暴力枚举一种办法 每遍历一个 node 就检查他与其他 node 是否重复 重复则删除 代码如下

class MyLinkedList1<E> extends SinglyLinkedList<E>{
  public MyLinkedList1(){
    super();
  }

  public void mySolution(){
    if(super.size()<2)  return;

    Node<E> current = super.findFirst();
    while(current.next()!=null){
      Node<E> runner = current;
      while(runner.next()!=null){
        if(current.data().equals(runner.next().data())){
          runner.setNext(runner.next().next());
        }else{
          runner = runner.next();
        }
      }
      if(current.next()!=null)  current = current.next();
    }
  }
}

该方法的空间复杂度如题目要求是 O(1) 时间复杂度是 O(n^2)

不使用 buffer 是很难提高时间复杂度的 所以只能如此 如果可以使用 buffer , 则使用一个 Hashtable 就可将时间复杂度提高到 O(n). 实现起来更加容易 所以这里省略代码

posted @ 2016-01-01 06:11  橙喵moe  阅读(156)  评论(0编辑  收藏  举报