循环链表增删改查java实现
Posted had1314
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了循环链表增删改查java实现相关的知识,希望对你有一定的参考价值。
采用的是内部类的方法,内部类是Element,代表着结点,里面声明了两个变量,一个用来存放数据,一个用来存放下一个结点的地址,类似于指针。
1 public class CircularLinkedList 2 private Element header=null;//定义了一个Elemment的引用变量 3 4 5 private class Element 6 public String data=null; 7 private Element next=null; 8 public Element(String data) 9 this.data=data; 10 11 public Element() 12 13 14 15 /** 16 * 初始化链表 17 */ 18 public void initList() 19 header = new Element();//将申请的Element对象地址赋值给引用变量 20 header.data=null; 21 header.next=header; 22 23 24 /** 25 * 插入链表 26 */ 27 public void insertList(String data) 28 Element node=new Element(); 29 node.data=data; 30 31 if (header.next==header) //判断是不是第一次插入元素 32 header.next=node; 33 node.next=header; 34 else 35 //temp引用在栈中,temp和header引用都指向堆中的initList()new的Element对象 36 Element temp=header;//head在这里是一个头结点,存放的是new出来的对象的地址 37 while(temp.next!=header) 38 temp=temp.next; 39 40 temp.next=node; 41 node.next=header; 42 43 44 45 /** 46 * 删除链表中的某个元素 47 */ 48 public void deleteList(String data) 49 Element temp=header; 50 while(temp.next!=header) 51 //判断当前temp的下一个结点是不是要删除的节点 52 if (temp.next.data.equals(data)) 53 temp.next=temp.next.next; 54 else 55 temp=temp.next;//temp指针后移 56 57 58 59 60 /** 61 * 获取链表的第i个位置 62 */ 63 public String getElement(int i) 64 Element element=new Element(); 65 Element temp=header; 66 if (i<0||i>size()) 67 System.out.println("获取链表的位置有误!"); 68 else 69 int count =0; 70 71 while(temp.next!=header) 72 count++; 73 if(count==i) 74 element.data=temp.next.data; 75 76 temp=temp.next; 77 78 79 return element.data; 80 81 82 /** 83 * 获取链表长度 84 */ 85 private int size() 86 87 Element temp=header; 88 int size=0; 89 while(temp.next!=header) 90 size++; 91 temp=temp.next; 92 93 return size; 94 95 /** 96 * 判断链表中是否存在某个元素 97 */ 98 public Boolean isContain(String data) 99 Element temp=header; 100 while(temp.next!=header) 101 if(temp.next.data.equals(data)) 102 return true; 103 104 temp=temp.next; 105 106 return false; 107 108 /** 109 * 打印链表 110 */ 111 public void print() 112 System.out.println("打印链表!"); 113 Element temp=header; 114 while(temp.next!=header) 115 temp=temp.next; 116 System.out.print(temp.data+"\\t"); 117 118 System.out.println(); 119 120
编写测试类
1 public class LinkText 2 3 public static void main(String[] args) 4 CircularLinkedList clist=new CircularLinkedList(); 5 clist.initList(); 6 clist.insertList("张三"); 7 clist.insertList("李四"); 8 clist.insertList("王二"); 9 clist.insertList("麻子"); 10 clist.print(); 11 clist.deleteList("张三"); 12 clist.print(); 13 String a=clist.getElement(2); 14 System.out.println(a); 15 16 17
运行结果如下:
需要注意的是:这里的引用变量,例如Element temp=new Element()
Element node=hader
这里的temp和node都是引用变量,存放在栈空间中,相当于一个指针指向堆空间中new出来的对象。
以上是关于循环链表增删改查java实现的主要内容,如果未能解决你的问题,请参考以下文章