在4-7章节中,为了实现队列,向链表中添加了Tail 尾结点。然而我认为还有可优化的余地。在链表中,可以用Node cur = head.next ; (循环 cur = cur.next ) 从头遍历到尾,但是并不能从尾遍历到头。如视频所言,这样链表是不对称的,那可不可以让链表对称?
链表只能从头往尾遍历, 那我可以在Node内部类中再添加一个属性Node prev,这样Node内部类中就有了三个属性:E data保存数据,Node next 指向下一个结点, Node prev指向上一个结点。
类似地,也可以来一个虚拟尾节点dummTail,在链表类的构造方法中,分别令dummyHead指向虚拟头结点,dummyTail指向虚拟尾结点,然后令dummyHead.next = dummyTail, dummyTail.prev = dummyHead , 而dummyHead. prev = null, dummyTail.next = null 。 这样就构造好了初始的链表
然后向链表中增添或者删除一个结点,先判断这个索引是离头结点还是离尾节点更近,如果index < size/2,说明离头近,从头遍历, 如果index > size/2 说明离尾近,从尾遍历。 遍历的方法都是类似的,都是设置一个临时指针temp,如果离头近,那么我就 Node temp = dummyhead ,(循环 temp =temp.next ) ; 如果离尾近,我就Node temp = dummyTail,(循环 temp = temp.prev) .
这样的话,添加头,添加尾 和 删除头,删除尾的时间复杂度都是1 . 这样的话,链表就对称了,意思是从头到尾进行操作,和从尾到头进行操作,并没有复杂度不同的问题。
不知道我这样想有没有合理性?