循环单链表

  1. 创建一个结点内部类
class Entry{
        //节点类
        int data;//内部类成员变量
        Entry next;

        public Entry(){//循环单链表初始化
            this.data=-1;
            next=null;
        }
        public Entry(int data){
            this.data=data;
            next=null;
        }
    }
  1. 循环单链表头插法
private Entry head=null;//创建一个头结点,赋值为空
    public TestClink(){//头结点的初始化
        this.head=new Entry();//new 一个head头结点
        this.head.next=this.head;//让这个循环链表的next域指向自己
    }

    public void insertHead(int val){
        Entry entry=new Entry(val);
        entry.next=this.head.next;//前边指向的结点地址给插入的 next
        this.head.next=entry;//后边指回来 
    }

输入:

TestClink t1=new TestClink();
        for(int i=0;i<9;i++){
            t1.insertHead(i);
        }
        t1.show2();

输出:
这里写图片描述

视图分析:
这里写图片描述
3. 循环单链表尾插法

public void insertTail(int val){//
        Entry entry = new Entry(val);
        Entry cur = this.head;

            while(cur.next != this.head){
                cur = cur.next;
            }
            cur.next = entry;
            entry.next = this.head;
        }

输入:

TestClink t1=new TestClink();
        for(int i=0;i<9;i++){
            t1.insertTail(i);
        }
        t1.show2();//链表输出方法

输出结果:
这里写图片描述
视图分析:
这里写图片描述

  1. 删除循环单链表的所有值为val的结点
    public void deleteEntry(int val){
        Entry prev=this.head;//前驱
        Entry cur=this.head.next;
        while(cur!=this.head){
            if(cur.data==val){
                prev.next=cur.next;
                cur=prev.next;
        }else{
                prev=cur;
                cur=cur.next;
            }
        }
    }

输入:

TestClink t1=new TestClink();
        for(int i=0;i<9;i++){
            t1.insertHead(i);
        }
        t1.show2();
        t1.deleteEntry(6);
        t1.show2();

输出:
这里写图片描述

视图分析:
这里写图片描述

  1. 求循环单链表的长度
 public void getLength(){//求循环链表的长度
        Entry cur=this.head;
        int len=0;
        while(cur.next!=this.head){
            len++;
            cur=cur.next;
        }
       System.out.println(len);
        }   

输入:

TestClink t1=new TestClink();
        for(int i=0;i<9;i++){
            t1.insertHead(i);
        }
        t1.show2();
        t1.getLength();

输出:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/xyxy66/article/details/80208747