今天疫情有所好转 十五的月亮 十六圆 晚上记得看月亮啊
自己的粗略见解 有问题可以随时指出 多多进步
LinkedList 底层为链表结构
首先先要明白何为链表结构 如图下
基本是上图这个意思 每个节点代码可以:
public class Node {
private Node previous;
private Node next;
private Object element;
public Node(Object element) {
this.element = element;
}
public Node getPrevious() {
return previous;
}
public void setPrevious(Node previous) {
this.previous = previous;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
public Object getElement() {
return element;
}
public void setElement(Object element) {
this.element = element;
}
}
这是手写的部分源码 可以参考下自己写写
比较简答的功能
public class MyLinkedList {
private Node first;
private Node end;
private int size;
public void add(Object obj){
Node node = new Node(obj);
if(first == null){
first =node;
end =node;
}else{
node.setPrevious(end);
node.setNext(null);
end.setNext(node);
end = node;
}
size++;
}
public void add(int index,Object obj){
Node node = getNode(index);
Node newNode = new Node(obj);
if(node != null){
Node up = node.getPrevious();
if(up !=null){
up.setNext(newNode);
}
node.setPrevious(newNode);
newNode.setNext(node);
if(index ==0){
first.setPrevious(newNode);
newNode.setNext(first);
first =newNode;
}
if(index == size-1){
end = newNode;
}
size++;
}
}
public Object get(int index){
Node temp = null;
return temp.getElement();
}
public Node getNode(int index){
Node temp = null;
if(index<0 || index>size-1){
throw new RuntimeException("下标越界"+index);
}
if(index<size>>1){
temp =first;
for (int i = 0; i <index; i++) {
temp = temp.getNext();
}
}else{
temp =end;
for (int i = size-1; i>index; i--) {
temp = temp.getPrevious();
}
}
return temp;
}
public void remove(int index){
Node node = getNode(index);
if(node != null) {
Node up = node.getPrevious();
Node down = node.getNext();
if (up != null) {
up.setNext(down);
}
if (down != null) {
down.setPrevious(up);
}
if (index == 0) {
first = down;
}
if (index == size - 1) {
end = up;
}
}
}
@Override
public String toString() {
Node temp = first;
StringBuilder strb = new StringBuilder("[");
while (temp!=null){
strb.append(temp.getElement()+",");
temp =temp.getNext();
}
strb.setCharAt(strb.length()-1,']');
return strb.toString();
}
}```