此处只实现了增加元素的方法,(删、改、查)和增类似
注:若需要删、改、查。请在下面评论,我再去写
//实现自己的链表
public class MyLinkedList {
private Node first;//创建一个第一个节点对象
private Node last;//创建一个最后节点对象
private int size=0;
//写一个方法来返回当前链表的长度
public int size() {
return size;
}
//先创建一个节点内部类Node
class Node{
Node pre;//创建一个指向前节点的元素
Node next;//创建一个指向后节点的元素Node
Object ele;//创建一个对象类型ele用来装本节点的内容
public Node(Object ele) {
//提供一个构造函数,当创建一个Node对象时就要传入该节点的内容ele
this.ele=ele;
}
}
/*
* 增、增、增、增、增、增、增、增、增、增、增、增、
*/
//向最前面元素前插元素
public void addFirst(Object ele){
Node node=new Node(ele);
if(size==0) {//判断链表是否为空
this.first = node;//链表为空将第一个元素设为当前元素
this.last = node;//将最后一个元素设为当前元素
}
else {
node.next = this.first;//将当前创建的元素的下一个元素设为原链表第一个元素
this.first.pre=node;//将原链表第一个元素的前面一个元素设为当前插入的元素
this.first=node;//将该链表第一个元素设为当前插入元素
}
size++;//将当前链表长度加一
}
//向最后面元素插元素
public void addLast(Object ele){
Node node=new Node(ele);
if(size==0) {//判断链表是否为空
this.first = node;//链表为空将第一个元素设为当前元素
this.last = node;//将最后一个元素设为当前元素
}
else {
node.pre = this.last;//将当前创建的元素的上一个元素设为原链表最后元素
this.last.next=node;//将原链表最后元素的后面一个元素设为当前插入的元素
this.last=node;//将该链表最后元素设为当前插入元素
}
size++;//将当前链表长度加一
}
//向链表中添加元素
public void add(int index,Object ele){//index为当前插入的位置下标
Node node=new Node(ele);
if(index < 0&&index>size) {//插入的位置不应该是负数
System.out.println("插入位置不合法,未插入成功");
return;
}
else {
if(index == 0) {//插入位置为第一个
addFirst(ele);
}
else if(index == size) {//插入位置为最后一个
addLast(ele);
}
else {
Node sb=this.first;
for(int i=0;i<index;i++)//找到当前index的元素
{
sb=sb.next;
}
node.pre=sb.pre;//将原index位置的元素的前一个元素设置为node的前一个
sb.pre.next=node;//将原index位置的元素的前一个元素的后一个元素设置为node
sb.pre=node;//将原index位置的元素的前一个元素设置为node
node.next=sb;//将node的下一个元素设为原index位置的元素
}
}
size++;
}
/*
* 重写toString()方法,用来特定显示当前链表
* 注:为什么需要重写toString()方法,每个类都继承的Object类,而Object类中就有toString方法
* 若在输出时不是String类型,输出对象就会自动调用自身的toString方法来输出对象的具体内容
* 若不重写字节System.out.println(list)则调用父类Object类的toString方法就是打印当前
* 对象的地址
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
if(size==0)//如果当前链表没有元素就返回[]
{
return "[]";
}
StringBuffer sbr = new StringBuffer();
Node cur=this.first;
sbr.append("[");
for(int i = 0;i<size;i++) {
sbr.append(cur.ele);
if(i!=size-1) {
sbr.append(",");
}
else {
sbr.append("]");
}
cur=cur.next;
}
return sbr.toString();
}
}
测试结果: