线性链表--哨兵节点
时间:2010-11-13 来源:liurhyme
哨兵(sentinel)是一个哑对象,可以简化边界条件。是一个附加的链表节点,该节点作为第一个节点,但是它其实并不存储任何东西,只是为了操作的方便而引入的。因此,如果一个链表有哨兵节点的话,那么线性表的第一个元素应该是链表的第二个节点(个位置的时候,需要考虑该位置上原来的节点并没有前驱节点;而如果有哨兵节点的话, 线性表的每个位置的节点都有前驱节点,因此可以统一处理。(注意:哨兵节点根本不出现在线性表中,所以虽然它没有前驱,但是前面的那句话并不矛盾)。
带哨兵节点的双链表
带哨兵节点的双链表
- package com.eshore.sweetop.dataframe;
-
- public class DoubleLinkedList {
- private Element nil;
- public DoubleLinkedList() {
- nil=new Element(null);
- nil.pre=nil;
- nil.next=nil;
- }
- public void insert(Object o){
- Element e=new Element(o);
- e.next=nil.next;
- nil.next.pre=e;
- nil.next=e;
- e.pre=nil;
- }
- public Element search(Object o){
- Element e=nil.next;
- while(e!=nil&&e.key!=o){
- e=nil.next;
- }
- return e;
- }
- public void delete(Object o){
- Element e=search(o);
- e.pre.next=e.next;
- e.next.pre=e.pre;
- }
- public class Element{
- private Element pre;
- private Element next;
- public Object key;
- public Element(Object x){
- this.key=x;
- }
- }
- public static void main(String[] args) {
- DoubleLinkedList dll=new DoubleLinkedList();
- dll.insert(Integer.valueOf(1));
- System.out.println(dll.search(Integer.valueOf(1)).key);
- dll.delete(Integer.valueOf(1));
- }
- }
相关阅读 更多 +