java实现循环链表

来源:互联网 发布:藏族音乐软件 编辑:程序博客网 时间:2024/06/05 07:29

其实两者的主要差别就在于如何判断是否到了链表的结尾:

在单链表中

1
2
3
4
while(temp.next!=null)
{
    temp=temp.next;
}

在循环链表中

1
2
3
4
while(temp.next!=header)
{
    temp=temp.next;
}

 

下面是循环链表的代码和测试代码:

循环链表的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
package circularlinkedlist;
 
public class CircularLinkedList {
     
    class Element
    {
        public Object value=null;
        private Element next=null;
    }
    private Element header = null;//头结点
    /**
     * 初始化链表
     * */
    void initList()
    {
        header = new Element();
        header.value=null;
        header.next=header;
    }
     
    /**
     * 插入链表
     * */
    void insertList(Object o)
    {
        Element e=new Element();
        e.value=o;
        if(header.next==header)//第一次插入元素
        {
            header.next=e;
            e.next=header;
        }else//不是第一次插入元素
        {
            //temp引用在栈中,temp和header引用都指向堆中的initList()中new的Element对象
            Element temp = header;
            while(temp.next!=header)//寻找最后一个元素
            {
                temp=temp.next;
            }
            temp.next=e;
            e.next=header;//新插入的最后一个节点指向头结点
        }
    }
     
    /**
     * 删除链表中第i个元素
     * */
    void deletelist(Object o)
    {
        Element temp =header;
        while(temp.next!=header)
        {
            //判断temp当前指向的结点的下一个结点是否是要删除的结点
            if(temp.next.value.equals(o))
            {
                temp.next=temp.next.next;//删除结点
            }else
            {
                temp=temp.next;//temp“指针”后移
            }
        }
    }
     
    /**
     * 获取链表的第i个位置的元素
     * */
    Element getElement(int i)
    {
        if(i<=0 || i>size())
        {
            System.out.println("获取链表的位置有误!返回null");
            return null;
        }
        else
        {
            int count =0;
            Element element = new Element();
            Element temp = header;
            while(temp.next!=header)
            {
                count++;
                if(count==i)
                {
                    element.value=temp.next.value;
                }
                temp=temp.next;
            }
            return element;
        }
    }
    /**
     * 链表长度
     * */
    int size()
    {
        Element temp = header;
        int size=0;
        while(temp.next!=header)
        {
            size++;
            temp=temp.next;
        }
        return size;
    }
     
    /**
     * 判断链表中是否存在某元素
     * */
    Boolean isContain(Object o)
    {
        Element temp =header;
        while(temp.next!=header)
        {
            if(temp.next.value.equals(o))
            {
                return true;
            }
            temp=temp.next;
        }
        return false;
    }
    /**
     * 打印链表
     * */
    void print()
    {
        System.out.print("打印链表:");
        Element temp =header;
        while(temp.next!=header)
        {
            temp=temp.next;
            System.out.print(temp.value+"\t");
        }
        System.out.println();
    }
}

测试代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package circularlinkedlist;
 
public class CircularLinkedListMain {
 
    public static void main(String[] args) {
        CircularLinkedList clList = new CircularLinkedList();
        clList.initList();
        clList.insertList(1);
        clList.insertList(2);
        clList.insertList(3);
        clList.insertList(4);
        clList.insertList(5);
        clList.print();
         
        System.out.println("链表长度:"+clList.size());
        clList.deletelist(1);
        clList.deletelist(5);
        clList.print();
        System.out.println("第1个元素值为:"+clList.getElement(1).value);
        System.out.println("第2个元素值为:"+clList.getElement(2).value);
        System.out.println("第3个元素值为:"+clList.getElement(3).value);
     
        System.out.println(clList.isContain(2));
        System.out.println(clList.isContain(6));
//      System.out.println(clList.isContain(5));
    }
 
}

  

0 0
原创粉丝点击