您的位置:首页 > 编程语言 > Java开发

Java_容器2-2_LinkedList源码编写

2018-08-04 21:48 316 查看

LinkeList底层是由链表实现的,查询慢,但增删改比较方便

以下是本人画的链表草图(滑稽脸):

1、加元素

[code]/*
* 测试加元素  重点!!!
*/
public void add(Object obj) {
if(first == null) {         //第一个为空
Node n = new Node();
n.previous = null;
n.next = null;

first = n;
last  = n;
}else {
//直接往last后面增加新的节点
Node n = new Node();       //new一个新的节点
n.setPrevious(last);       //新节点的头连接的是是最后一个
n.setObj(obj);             //n 为值
n.setNext(null);           //新节点的尾连接的是是空

last.setNext(n);            //last的下一个是 n

last = n;                   //最后一个为 n
}
size++;                          //每增加一个,size就多加一个
}
public int size() {
return size;
}

分析:①如果链表为空,即第一个链表的内容是空,则说明n.next和n.previous的内容为空,所以第一个和最后一个都是n;

            ②如果链表里面有内容,则第一个链表的内容不为空,则需要往last后面添加新的节点:新节点的头连接的是最后一个,内容是新家的元素,新节点的尾是空,同时,last的下一个是n。

2、在指定位置加元素

[code]/*
* 在指定位置添加元素 重点!!
*/
public void add(int index,Object obj) {
Node temp = null;        //指针,所在的节点
if(first != null) {
temp = first;       //temp遍历的对象,从第一个开始遍历。
for(int i = 0;i<index;i++) {
temp = temp.next;      //把下一个赋给自己
}
}
Node newNode = new Node();
newNode.obj = obj;

if(temp !=null ) {
Node up = temp.previous;    //temp为原节点

up.next = newNode;
newNode.previous = up;

newNode.next = temp;
temp.previous = newNode;
size++;
}
}

分析:遍历,寻找为index的索引;

原节点的上一个节点(up)的下一个是新节点(newNode),新节点的上一个是up;

新节点的下一个节点是原节点,原节点的上一个是新节点。

3、get方法

[code]/*
* 测试get
*/
public Object get(int index) {

rangeCheck1(index);

Node temp = null;        //指针,所在的节点
if(first != null) {
temp = first;       //temp遍历的对象,从第一个开始遍历。
for(int i = 0;i<index;i++) {
temp = temp.next;      //把下一个赋给自己
}
}
return temp.obj;
}

比较简单,在此就不分析了

4、删除指定位置的元素

[code]/*
* 删除指定位置的对象
*/
public void remove(int index) {

Node temp = null;        //指针,所在的节点
if(first != null) {
temp = first;       //temp遍历的对象,从第一个开始遍历。
for(int i = 0;i<index;i++) {
temp = temp.next;      //把下一个赋给自己
}
}
if(temp != null) {
Node up = temp.previous;
Node down = temp.next;
up.next = down;
down.previous = up;
}
size--;
}

分析:遍历找出为index的索引

原节点的上一个(up)的下一个是连接下一个(down);

原节点得下一个节点连接上一个

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: