首先构造一个基础的List 需要什么条件 ? (思考)
长度 : length
索引 : index
元素 : x
第一 长度和索引的关系 max(index) = length -1
开始构造 :
public interface <T> LList {
// 获取长度 的方法
public int size () ;
// 判断空
public boolean is Empty () ;
//插入元素
public void insert ( int index , object x ) ;
//删除元素
public void delete ( int dex );
// 查找元素
public Object get ( int dex );
}
下面就是这些方法的具体实现
一 . 单向循环链表
思考 :单向链表是个是什么东西跟这个List 普通列表有什么区别呢 ,画个单向链表图
实际的结构应该是这样的 head --->> 对象 + 引用--->> 对象 + 引用--->> 对象 + 引用
实际上单链表的存储是分散的,实际存放是根据每个Node 的next 指针查找下一个对象
开始实现单链表 (注意这里是带头节点的插入操作)
思考 结构 :Node head = NULL ;
节点的值 data
next 为下个节点的引用
public class LinkList {
Node head = NULL ; //头结点为空
/**
- 链表中的节点,data代表节点的值,next是指向下一个节点的引用
- @author Hibernate sir
*/
public class Node {
Node next = NULL ;
int data ;
public Node ( int data ){
this.data = data ;
}
}
//插入元素
public void addNode ( int x ) {
Node newnode = new Node (x) ; //实例化一个节点
if (head = = null ){ //链表表头为空,返回表头
head = newnode ;
return ;
}
Node tmp = head;
while (tmp.next != null) {
tmp = tmp.next;
}
tmp.next = newNode;
}
//删除元素
public boolean deleteNode( int index ){
if (index < 1 || index > length()) {
return false;
}
if (index == 1) {
head = head.next;
return true;
}
int i = 1;
Node preNode = head;
Node curNode = preNode.next;
while (curNode != null) {
if (i == index) {
preNode.next = curNode.next;
return true;
}
preNode = curNode;
curNode = curNode.next;
i++;
}
return false;
}
/**- @return 返回节点长度
*/
public int length() {
int length = 0;
Node tmp = head;
while (tmp != null) {
length++;
tmp = tmp.next;
}
return length;
}
}