单向链表的方法优化

       前几天写了一篇关于单向链表的实现方法,单向链表的具体实现在里面都有说明,见博客:http://cq520.iteye.com/blog/1853186

       不过细心的朋友也许发现了,上次写的几个方法其实是存在漏洞的,插入方法与删除方法都不能操作第一个元素,而实际上操作第一个元素的方法与操作其他元素的方法是一样的,只是代码描叙上有些差异,原因在于:首结点不存在前结点对它的引用

    优化之后的代码如下:

/**
 * 向链表中插入新元素的方法	
 * @param index 插入的位置
 * @param obj 
 */
public void insert(int index,Object obj){
	Node node=head;
	Node sert=new Node(obj);
	int j=1;
	//插入的位置不合理
	if(index<1||index>size()+1){
		try {
			//抛出异常
			throw new ArrayIndexOutOfBoundsException();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	else{
		//如果链表为空则在第一个位置添加元素
		if(head==null){
			add(sert);
		}
		else{
			if(index==1){
				sert.next=head;
				head=sert;
			}else{
				while(j<index-1){
				node=node.next;
				j++;
			}
			sert.next=node.next;
			node.next=sert;
		}
		size++;
		}
	}
}

 

 删除元素的方法:

 

/**
* 删除指定位置的结点
* @param index 索引
*/
public void delete(int index){
	if(index<1||index>size()){
		try{
			throw new ArrayIndexOutOfBoundsException();
		}catch(Exception e){
			e.printStackTrace();
		}
	}
	else{
		Node node=head;
		if(index==1){
			head=head.next;
		}
		else{
			int j=1;
			while(node!=null&&j<index-1){
				//查找到第i-1个元素
				node=node.next;
				j++;
			}
			node.next=node.next.next;//删除第index个元素
		}
		size--;
	}
}

 

 

 

 

你可能感兴趣的:(java,数据结构,单链表)