循环单链表操作
1.CircleLinkList 类实现循环单链表基本操作
1 package com.neusoft.link; 2 import com.neusoft.List.IList; 3 public class CircleLinkList implements IList{ 4 public Node head; 5 public CircleLinkList() { 6 // TODO 初始化 7 head=new Node();//初始化头结点 8 head.next=head; 9 } 10 @Override 11 public void clear() { 12 // TODO 清空 13 head.next=head; 14 } 15 @Override 16 public boolean isEmpty() { 17 // TODO 判空 18 return head.next.equals(head); 19 } 20 @Override 21 public int length() { 22 // TODO 长度 23 Node p =head.next; 24 int length=0; 25 while (!p.equals(head)) { 26 p=p.next; 27 length++; 28 } 29 return length; 30 } 31 @Override 32 public Object get(int i) { 33 // TODO 读取带头结点的循环链表中第i个数据元素 34 Node p=head.next; 35 int j=0; 36 while (!p.equals(head)&&j i||p.equals(head)) { 41 System.out.println("第"+i+"个元素不存在!"); 42 } 43 return p.data; 44 } 45 46 @Override 47 public void insert(int i, Object x) { 48 // TODO 带头结点的循环链表中第i个节点之前插入一个值为x的元素 49 Node p = head; 50 int j=-1;//第i个节点前驱位置 51 while ((!p.equals(head)||j==-1)&&ji-1||(p.equals(head)&&j!=-1)) { 56 System.out.println("插入位置不合法!"); 57 } 58 Node s =new Node(x); 59 s.next=p.next; 60 p.next=s; 61 } 62 63 @Override 64 public void remove(int i) { 65 // TODO 移除循环单链表中第i个元素的节点,注意i的范围 66 Node p=head;//p指向要删除节点的前驱节点 67 int j=-1; 68 while ((!p.next.equals(head)||j==-1)&&j i-1||(p.next.equals(head)&&j!=-1)) { 73 System.out.println("删除位置不合法!"); 74 } 75 p.next=p.next.next; 76 } 77 78 @Override 79 public int indexOf(Object x) { 80 // TODO 查找值为x的元素,返回位置 81 Node p =head.next;//p指向首节点 82 int j=0; 83 while ((!p.equals(head))&&(!p.data.equals(x))) { 84 p=p.next; 85 j++; 86 } 87 if (!p.equals(head)) { 88 return j; 89 }else { 90 return -1; 91 } 92 } 93 @Override 94 public void display() { 95 // TODO 输出元素 96 Node p =head.next; 97 while (!p.equals(head)) { 98 System.out.print(p.data+" "); 99 p=p.next;100 }101 System.out.println();102 }103 104 @Override105 public int remove(Object i) {106 // TODO Auto-generated method stub107 return 0;108 }109 110 }
2.循环单链表的测试
1 package com.neusoft.link; 2 /** 3 * @author zhao-chj 4 * 测试循环单链表 5 */ 6 public class DebugCircleLinkList { 7 public static void main(String[] args) { 8 //-----------初始化循环链表中各个元素--------- 9 CircleLinkList L = new CircleLinkList();10 int n = 8;11 for (int i = 0; i
3.测试结果