linkedLIst的手写源码
public class MyLinkedList {
//建立一个叫first的节点,first表示当前节点的第一个节点
private Node first = null;
//建立一个叫last的节点,last表示当前节点
private Node last = null;
private int size = 0 ;
public void add(Object obj){
Node n = new Node();
if(first==null){
n.setPrevious(null);
n.setNext(null);
n.setObj(obj);
//将第一个节点赋给first和last
first=n;
last=n;
}else{
n.setPrevious(last);
n.setNext(null);
n.setObj(obj);
//将上一个节点的last设置为n
last.setNext(n);
last=n;
}
size++;
}
public Node node(int index){
Node temp = null;
//把第一个节点赋值给temp
if(first!=null){
temp=first;
}
//遍历节点,把第index个节点赋值给temp
for (int i = 0; i < index; i++) {
temp = temp.next;
}
return temp;
}
public void add(int index,Object obj){
Node temp = node(index);
Node newNode = new Node();
newNode.setObj(obj);
if (temp!=null){
//把newNode插进集合中
//修改newNode,使得新节点的前一个为temp节点前面的节点
newNode.setPrevious(temp.getPrevious());
//修改temp前面一个节点,使得next中的节点为newNode
temp.getPrevious().setNext(newNode);
//修改newNode,把temp插到newnode后面
newNode.setNext(temp);
temp.setPrevious(newNode);
}
size++;
}
public int size(){
return size;
}
//获取第index个节点
public Object get(int index){
//检查越界异常
rangeCheck(index);
Node temp =node(index);
if(temp!=null){
return temp.getObj();
}
return null;
}
public void remove(int index){
Node temp = node(index);
if(temp!=null){
//将temp后面节点的previous设置为temp前面一个节点
temp.getNext().setPrevious(temp.getPrevious());
temp.getPrevious().setNext(temp.getNext());
size--;
}
}
private void rangeCheck(int index){
if(index<0||index>=size){
try {
throw new Exception();
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
// MyLinkedList list = new MyLinkedList();
// list.add("你好");
// list.add("哦哦");
// list.add("java");
// list.add("谢谢");
// list.remove(1);
// list.add(1,"再见啊");
// list.add(2,"开心呢");
// System.out.println(list.size());
// System.out.println(list.get(1));
// System.out.println(list.get(2));
// StringBuffer stringBuffer =new StringBuffer(null);
StringBuilder stringBuilder = new StringBuilder(null);
System.out.println(stringBuilder);
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
MyLinkedList that = (MyLinkedList) o;
return size == that.size &&
Objects.equals(first, that.first) &&
Objects.equals(last, that.last);
}
@Override
public int hashCode() {
return Objects.hash(first, last, size);
}
}
package MyLinkedList;
/**
* @author 张育松
* @date 2020/2/25 - 19:54
* @description
*/
public class Node {
Object obj;
Node previous;
Node next;
public Node() {
}
public Node(Object obj, Node previous, Node next) {
this.obj = obj;
this.previous = previous;
this.next = next;
}
public void setObj(Object obj) {
this.obj = obj;
}
public void setPrevious(Node previous) {
this.previous = previous;
}
public void setNext(Node next) {
this.next = next;
}
public Object getObj() {
return obj;
}
public Node getPrevious() {
return previous;
}
public Node getNext() {
return next;
}
}