Java_容器2-2_LinkedList源码编写

LinkeList底层是由链表实现的,查询慢,但增删改比较方便

以下是本人画的链表草图(滑稽脸):

1、加元素

/*
 * 测试加元素  重点!!!	
 */
	public void add(Object obj) {
		if(first == null) {         //第一个为空
			Node n = new Node();
			n.previous = null;
			n.next = null;
			
			first = n;
			last  = n;
		}else {
			//直接往last后面增加新的节点
			Node n = new Node();       //new一个新的节点
			n.setPrevious(last);       //新节点的头连接的是是最后一个
			n.setObj(obj);             //n 为值
			n.setNext(null);           //新节点的尾连接的是是空
			
			last.setNext(n);            //last的下一个是 n
			
			last = n;                   //最后一个为 n	
		}
		size++;                          //每增加一个,size就多加一个
	} 
	public int size() {
		return size;
	}
	

分析:①如果链表为空,即第一个链表的内容是空,则说明n.next和n.previous的内容为空,所以第一个和最后一个都是n;

            ②如果链表里面有内容,则第一个链表的内容不为空,则需要往last后面添加新的节点:新节点的头连接的是最后一个,内容是新家的元素,新节点的尾是空,同时,last的下一个是n。

2、在指定位置加元素

/*
 * 在指定位置添加元素 重点!!
 */
	public void add(int index,Object obj) {
		Node temp = null;        //指针,所在的节点
		if(first != null) {
			temp = first;       //temp遍历的对象,从第一个开始遍历。
			for(int i = 0;i<index;i++) {
				temp = temp.next;      //把下一个赋给自己
			}
		}
		Node newNode = new Node();
		newNode.obj = obj;
		
		if(temp !=null ) {
			Node up = temp.previous;    //temp为原节点
			
			up.next = newNode;
			newNode.previous = up;
			
			newNode.next = temp;
			temp.previous = newNode;
			size++;
		}
	}

分析:遍历,寻找为index的索引;

原节点的上一个节点(up)的下一个是新节点(newNode),新节点的上一个是up;

新节点的下一个节点是原节点,原节点的上一个是新节点。

3、get方法

/*
 * 测试get
 */
	public Object get(int index) {
		
		rangeCheck1(index);
		
		Node temp = null;        //指针,所在的节点
		if(first != null) {
			temp = first;       //temp遍历的对象,从第一个开始遍历。
			for(int i = 0;i<index;i++) {
				temp = temp.next;      //把下一个赋给自己
			}
		}
		return temp.obj;
	}
	

比较简单,在此就不分析了

4、删除指定位置的元素

/*
 * 删除指定位置的对象	
 */
	public void remove(int index) {
		
		Node temp = null;        //指针,所在的节点
		if(first != null) {
			temp = first;       //temp遍历的对象,从第一个开始遍历。
			for(int i = 0;i<index;i++) {
				temp = temp.next;      //把下一个赋给自己
			}
		}
		if(temp != null) {
		Node up = temp.previous;
		Node down = temp.next;
		up.next = down;
		down.previous = up;
		}
		size--;
	} 

分析:遍历找出为index的索引

原节点的上一个(up)的下一个是连接下一个(down);

原节点得下一个节点连接上一个

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值