网课学习笔记
还不是很理解,先记下来…
package util;
public class LinkBox implements Box{
private Node first;//记录首节点
private Node last;//记录尾节点
private int size;//记录有效元素个数
private void newLast(int element){//将新数据插入链表的尾端
Node l = last;
Node newNode = new Node(l,element,null);//新节点变成尾节点
// 将新节点对象设置为尾节点
last = newNode;
// System.out.println(last);
if(l == null){
first = newNode;
}else{
l.next = newNode;
}
// 有效元素加1
size ++;
}
// 添加
private Node node(int index){
Node targetNode;//
//判断index范围是前半部分还是后半部分
if(index < (size>>1)){//前半部分
targetNode = first;
for(int i = 0; i < index; i ++){
targetNode = targetNode.next;
}
}else{//后半部分
targetNode = last;
for(int i = size-1; i > index; i --){
targetNode = targetNode.pre;
}
}
return targetNode;
}
// 删除 将给定的node节点对象删除 并保留数据
private int unlink(Node targetNode){
// 获取当前node的item信息
int oldVal = targetNode.item;
// 当前node的前一个
Node pre = targetNode.pre;
// 当前node的下一个
Node next = targetNode.next;
// 删除节点对象
if(pre==null){//当前节点是第一个
first = next;//第一个等于下一个
}else {//当前节点不是第一个
pre.next = next;//前一个的下一个等于下一个
targetNode.pre = null;
}
if(next==null){//当前node是最后一个
last = pre;
}else {
next.pre = pre;//上一个的下等于前一个
targetNode.next = null;
}
size --;
return oldVal;
}
public boolean add(int element) {
// 将element存放入一个新的node对象里 添加到链表的额尾端
this.newLast((element));
System.out.printf("添加成功");
return true;
}
public int get(int index) {
// 检测范围
// 找到index位置的那个node
Node targetNode = this.node(index);
// 返回
return targetNode.item;
}
public int remove(int index) {
//检测范围
// 找到index位置的那个node
Node targetNode = this.node(index);
// // 删除当前的目标节点 返回oldVal
int oldVal = this.unlink(targetNode);
return oldVal;
}
public int size() {
return size();
}
}
interface
package util;
public interface Box {
public boolean add(int element);
public int get(int index);
public int remove(int index);
public int size();
}
节点类
package util;
public class Node {
public Node pre;//上一个node对象
public int item;//当前数据
public Node next;//下一个node对象
public Node(Node pre,int item,Node next){
this.pre = pre;
this.item = item;
this.next = next;
}
}