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
- JAVA实现循环链表
- java实现循环链表
- java实现循环链表
- Java实现循环链表
- java实现循环链表
- Java实现 循环链表
- 循环链表(java实现)
- Java循环链表实现约瑟夫环
- Java循环链表实现约瑟夫环
- 用java实现循环链表
- 双向循环链表--java实现
- java实现双向循环链表
- Java循环链表实现约瑟夫环
- 约瑟夫环 java循环链表实现
- 循环链表判断(Java实现)
- Java数组实现循环队列、Java链表实现队列
- 循环链表实现循环队列
- 数据结构Java实现 ----循环链表、仿真链表
- 试运行
- win8.1下Rational Rose7.0的安装
- 输出指定长度的斐波那契数列
- 【codevs】2152 滑雪 记忆化搜索
- Mybatis之typeAliases
- java实现循环链表
- hdu3652——B-number(数位dp变形)
- 第4周 项目5--猴子选大王
- 缓存淘汰算法--LRU算法
- hdoj 5895 Mathematician QSC 【数论----矩阵快速幂求解类斐波那契数列】
- Android开发之局域网聊天软件
- PHP密码找回步骤
- 关于重载赋值操作符需要返回引用
- Poj 3169 Layout【差分约束+SPFA】