算法中經常會涉及循環鏈表和雙向鏈表這些特殊的鏈表,對於循環鏈表來講,從表中任意節點出發都可以找到其餘節點,對於循環鏈表來講惟一的區別是循環結束的條件改成是否指向頭指針。本文介紹循環鏈表和雙向鏈表的一些經常使用操做的Java實現。
1.單循環鏈表的查找操做node
public Lnode get(char x){ Lnode p = h.next; while(p!=null&&p.data!=x) p = p.next; if(p.data = x) return p; else return null; }
2.雙向鏈表的節點描述爲:算法
public class DulNode{ char data; DulNode next; DulNode prior; }
3.雙向循環鏈表的插入操做指針
public int insert(DulNode h,int i,char x){ DulNode p = h.next; int j=1; while(p!=h&&j<i){ j++; p = p.next; } if(j==i){ s = new DulNode(); s.data = x; s.next = p; s.prior = p.prior; p.prior.next = s; p.prior = s; return 1; }else return 0; }
4.雙向循環鏈表的刪除操做,刪除第i個節點pcode
public char delete(int i){ DulNode p = h.next; int j = 1; if(p!=h&&j<i){ j++; p = p.next; } if(p!=h){ s = p.data; p.prior.next = p.next; p.next.prior = p.prior; p = null; return s; }else return 0; }