算法中经常会涉及循环链表和双向链表这些特殊的链表,对于循环链表来讲,从表中任意节点出发都可以找到其余节点,对于循环链表来讲惟一的区别是循环结束的条件改成是否指向头指针。本文介绍循环链表和双向链表的一些经常使用操做的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; }