Java数据结构-实现链表(LinkedList)

此处只实现了增加元素的方法,(删、改、查)和增类似

注:若需要删、改、查。请在下面评论,我再去写

//实现自己的链表
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();
	}

}

 测试结果:

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值