用java实现单向链表
2015-01-16 10:46
393 查看
主要就是简单的指针移动,之前有人让我帮改了一个链表的程序,但我觉得实现有问题 改完 自己又写了一个,代码在下面
public class MyLinkedList {
int
size;
Node
head;
Node
tail;
public
MyLinkedList() {
size =
0;
head =
null;
tail =
null;
}
public void
addElement(A inNode) {
if (head ==
null) {
head = tail
= new Node(inNode);
} else
{
tail.next =
new Node(inNode);
tail =
tail.next;
}
size++;
}
public void
updateElement(int index, A content) {
if (index
< 0 || index >= size) {
return;
}
Node
curNode = head;
while (index
> 0) {
curNode =
curNode.next;
index--;
}
curNode.content = content;
}
public A
getElement(int index) {
if (index
< 0 || index >= size) {
return
null;
}
Node
curNode = head;
while (index
> 0) {
curNode =
curNode.next;
index--;
}
return
curNode.content;
}
public void
deleteElement(int index) {
if (index
< 0 || index >= size) {
return;
}
if (index ==
0) {
head =
head.next;
if (size ==
1) {
tail =
null;
}
size--;
return;
}
Node
preNode = null;
Node
curNode = head;
while (index
> 0) {
preNode =
curNode;
curNode =
curNode.next;
index--;
}
preNode.next
= curNode.next;
if (index ==
(size - 1)) {
tail =
preNode;
}
size--;
}
public void
deleteElement(A deleNode) {
//
这里可以用来报异常
if (size ==
0) {
return;
}
if
(head.content.equals(deleNode)) {
head =
head.next;
if (size ==
1) {
tail =
null;
}
size--;
return;
}
Node
curNode = head.next;
Node
preNode = head;
while
(curNode != null) {
if
(curNode.content.equals(deleNode)) {
if (curNode
== tail) {
preNode.next
= null;
tail =
preNode;
} else
{
preNode.next
= curNode.next;
}
size--;
return;
}
preNode =
curNode;
curNode =
curNode.next;
}
return;
}
public void
showList() {
if (size ==
0) {
System.out.println("链表为空");
return;
}
Node
curNode = head;
while
(curNode != null) {
System.out.print(curNode.content + "->");
curNode =
curNode.next;
}
System.out.println("null");
}
public
static void main(String[] args) {
MyLinkedList
myLinkedList = new MyLinkedList();
myLinkedList.addElement("A");
myLinkedList.addElement("B");
myLinkedList.addElement("C");
myLinkedList.addElement("D");
myLinkedList.showList();
myLinkedList.deleteElement("D");
myLinkedList.showList();
myLinkedList.updateElement(2, "E");
myLinkedList.showList();
System.out.println(myLinkedList.getElement(1));
myLinkedList.deleteElement(2);
myLinkedList.showList();
}
}
class Node {
public
Node(A content) {
this.content
= content;
next =
null;
}
A
content;
Node
next;
}
public class MyLinkedList {
int
size;
Node
head;
Node
tail;
public
MyLinkedList() {
size =
0;
head =
null;
tail =
null;
}
public void
addElement(A inNode) {
if (head ==
null) {
head = tail
= new Node(inNode);
} else
{
tail.next =
new Node(inNode);
tail =
tail.next;
}
size++;
}
public void
updateElement(int index, A content) {
if (index
< 0 || index >= size) {
return;
}
Node
curNode = head;
while (index
> 0) {
curNode =
curNode.next;
index--;
}
curNode.content = content;
}
public A
getElement(int index) {
if (index
< 0 || index >= size) {
return
null;
}
Node
curNode = head;
while (index
> 0) {
curNode =
curNode.next;
index--;
}
return
curNode.content;
}
public void
deleteElement(int index) {
if (index
< 0 || index >= size) {
return;
}
if (index ==
0) {
head =
head.next;
if (size ==
1) {
tail =
null;
}
size--;
return;
}
Node
preNode = null;
Node
curNode = head;
while (index
> 0) {
preNode =
curNode;
curNode =
curNode.next;
index--;
}
preNode.next
= curNode.next;
if (index ==
(size - 1)) {
tail =
preNode;
}
size--;
}
public void
deleteElement(A deleNode) {
//
这里可以用来报异常
if (size ==
0) {
return;
}
if
(head.content.equals(deleNode)) {
head =
head.next;
if (size ==
1) {
tail =
null;
}
size--;
return;
}
Node
curNode = head.next;
Node
preNode = head;
while
(curNode != null) {
if
(curNode.content.equals(deleNode)) {
if (curNode
== tail) {
preNode.next
= null;
tail =
preNode;
} else
{
preNode.next
= curNode.next;
}
size--;
return;
}
preNode =
curNode;
curNode =
curNode.next;
}
return;
}
public void
showList() {
if (size ==
0) {
System.out.println("链表为空");
return;
}
Node
curNode = head;
while
(curNode != null) {
System.out.print(curNode.content + "->");
curNode =
curNode.next;
}
System.out.println("null");
}
public
static void main(String[] args) {
MyLinkedList
myLinkedList = new MyLinkedList();
myLinkedList.addElement("A");
myLinkedList.addElement("B");
myLinkedList.addElement("C");
myLinkedList.addElement("D");
myLinkedList.showList();
myLinkedList.deleteElement("D");
myLinkedList.showList();
myLinkedList.updateElement(2, "E");
myLinkedList.showList();
System.out.println(myLinkedList.getElement(1));
myLinkedList.deleteElement(2);
myLinkedList.showList();
}
}
class Node {
public
Node(A content) {
this.content
= content;
next =
null;
}
A
content;
Node
next;
}
相关文章推荐
- java 实现单向链表
- Java 之 模拟单向链表和双向链表的实现
- Java实现单向链表
- java实现单向链表的增、删、改、查
- java单向链表的实现
- java数据结构之LinkedQueue(用链表实现的双端单向队列)
- Java面向对象基础--实现单向链表
- java实现单向链表
- Java模拟单向链表和双向链表的实现
- java实现单向链表的增、删、改、查
- Java模拟单向链表和双向链表的实现
- JAVA实现单向链表反转2
- Java实现链表(单向和双向)
- Java 实现链表 单向链表
- 单向单链表的java实现
- 单向链表(单链表)的Java实现
- java实现单向链表
- Java模拟单向链表和双向链表的实现
- 在java实现自定义链表(单向链表)
- Java模拟单向链表和双向链表的实现