一.对于LinkedList需要方法的简单分析
从简图中可以看出,要完成对链表的简单实现,首先应先具有一个用于创造节点对象的Node类,在Node类中应至少具有两个属性:
(1).用于保存本节点数据的属性
(2).用于保存下一个节点位置的属性
根据链表面向对象的特点,考虑到对各种类型数据的保存,因此需要创建一个Object对象来储存数据;
除了Node类之外,还需要一个用于储存方法的类,这里我所命名的为MyLinkedList类,在这一类中,需要实现
(1)节点数据的增删
(2)节点数据的查找,获取
(3)链表的长度
这三个基本方法来确保链表至少是可用的。
二.对于LinkedList简单的代码实现
(1)Node类(属性类)
public class Node {
public Node next; //保存下一个节点
public Object data; //保存数据
public Node(Object data){
this.data = data;
}
}
(2).MyLinkedList类(方法类)
public class MyLinkedList<E> implements LinkedList<E>{
public Node head; //首节点
public Node last; //尾节点
public int size=0; //长度
@Override
public void add(E obj) {
//创建节点对象
Node newNode = new Node(obj);
//判断首节点是否为空
if(head == null){
head = newNode;
last = newNode;
}else{
last.next = newNode; //保存到尾节点
last = newNode; //更新尾节点
}
size++;
}
@Override
public E get(int index) {
if(index<1||index>size)
return null;
else{
Node pass = head;
for(int i=0;i<index;i++){
pass = pass.next;
}
return (E) pass.data;
}
}
@Override
public E remove(int index) {
if(index<1||index>size){
return null;
}
else{Node pass1 = head;
Node pass2 = head;
for(int i=0;i<index-1;i++){
pass1 = pass1.next;//此时pass1为第index个节点
}
for(int i=0;i<index-2;i++){
pass2 = pass2.next;//此时pass2为第index-1个节点
}
//将第index+1个节点的数据传入第index-1的next中实现对接
pass2.next = pass1.next;
//将第index个的节点数据清零
pass1 = null;
return null;}
}
@Override
public void remove(E obj) {
int index = 0;
Node pass = head;
for(int i=0;i<size;i++){
if(pass.data==obj){
index=i;
}
else pass = pass.next;
}
Node pass1 = head;
Node pass2 = head;
for(int i=0;i<index-1;i++){
pass1 = pass1.next;//此时pass1为第index个节点
}
for(int i=0;i<index-2;i++){
pass2 = pass2.next;//此时pass2为第index-1个节点
}
//将第index+1个节点的数据传入第index-1的next中实现对接
pass2.next = pass1.next;
//将第index个的节点数据清零
pass1 = null;
}
@Override
public int size() {
Node pass = head;
while(pass!=null){
size++;
pass = pass.next;
}
return size;
}
}