面试题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). 实现起来更加容易 所以这里省略代码