特点
循环链表的特点是无须增加存储量,仅对表的链接方式稍作改变,即可使得表处理更加方便灵活。
链表的连接:
LinkListConnect(LinkListA,LinkListB) {//假设A,B为非空循环链表的尾指针 LinkList p = A.next;//①保存A表的头结点位置 A.next = B.next.next;//②B表的开始结点链接到A表尾 free(B.next);//③释放B表的头结点 B.next = p; }
判断一个链表是否存在循环连接
编写两个java类,一个为Linkitem.java,另一个为测试类LinklistTest.java,分别如下:
//Linkitem.java public class Linkitem { Linkitem previous; String data; Linkitem next; public Linkitem() { } public Linkitem(Linkitem previous, String data, Linkitem next) { super(); this.previous = previous; this.data = data; this.next = next; } public Linkitem getPrevious() { return previous; } public void setPrevious(Linkitem previous) { this.previous = previous; } public String getData() { return data; } public void setData(String data) { this.data = data; } public Linkitem getNext() { return next; } public void setNext(Linkitem next) { this.next = next; } } ***************************************************** //LinklistTest.java import java.util.ArrayList; public class LinklistTest { public static void main(String[] args) { //初始化链表项 Linkitem a = new Linkitem(null, "a", null); Linkitem b = new Linkitem(null, "b", null); Linkitem c = new Linkitem(null, "c", null); Linkitem d = new Linkitem(null, "d", null); a.setPrevious(d); a.setNext(b); b.setPrevious(a); b.setNext(c); c.setPrevious(b); c.setNext(d); d.setPrevious(c); d.setNext(a); //新建存放链表的数组列表 ArrayList<Linkitem> list = new ArrayList<Linkitem>(); //添加个链表项 list.add(a); list.add(b); list.add(c); list.add(d); //是否为循环链表的判断变量 boolean link = false; Linkitem start = a; Linkitem current = a; //判断循环链表 for (int i = 0; i < list.size(); i++) { current = current.next; if (start.data.equals(current.data)) { link = true; } } //输出 if (link == true) { System.out.println("此链表为循环链表。"); } else { System.out.println("此链表不是循环链表。"); } } }
输出结果:
此链表为循环链表。
如果存在问题,我们随时交流!