`

Java入门---自定义链表的实现

阅读更多
定义节点类
/**
 * 链表的节点类
 * @author se7en
 *
 */
public class Node {
	public int data;//元素的值
	public Node Next;//链表指针,指向下一个元素
}



链表的实现类
/**
 * 链表的实现类
 * @author se7en
 * 时间:2013年11月11日 23:37:56
 */
public class MyList {
	private Node head = null;//链表的头指针
	private int count = 0;//记录元素的个数
	//添加方法,默认添加到最后
	public void add(Node node){
		add(node,count);
	}
	//添加到指定pos位置
	public void add(Node node,int pos){
		//如果添加未知错误
		if(pos<0||pos>count){
			System.out.println("添加未知错误!");
			return;
		}
		//如果链表为空,直接将头指针指向node
		if(count == 0){
			head = node;
			count++;
			return;
		}
		//定义一个游标指针,并让其指向头节点
		Node flag = head;
		//循环找到要添加位置的上一个节点
		for(int i=0;i<pos-1;i++){
			flag = flag.Next;
		}
		//建立链接,添加元素
		node.Next = flag.Next;
		flag.Next = node;
		count++;
	}
	//删除方法,默认在头删除
	public Node remove(){
		remove(0);
		return null;
	}
	//删除指定位置pos的节点
	public Node remove(int pos){
		//如果删除未知错误
		if(pos<0||pos>count-1){
			System.out.println("删除位置错误!");
			return null;
		}
		//如果链表为空
		if(count == 0){
			System.out.println("链表为空,删除错误!");
			return null;
		}
		//定义一个游标指针flag,并让其指向头节点
		Node flag = head;
		//如果只有一个元素
		if(count == 1){
			head = null;
			count = 0;
			return flag;
		}
		//如果删除的是头节点,修改头指针
		if(pos == 0){
			head = head.Next;
			flag.Next = null;
			count--;
			return flag;
		}
		//其他情况
		//循环找到要删除未位置的前一个
		for(int j=0;j<count-1;j++){
			flag = flag.Next;
		}
		//定义一个临时指针temp,用来标记要删除的节点
		Node temp = flag.Next;
		//建立链接,删除节点
		flag.Next = temp.Next;
		temp.Next = null;
		count--;
		return temp;
	}
	//获取指定位置pos的元素
	public Node get(int pos){
		//定义一个游标指针,并让其指向头节点
		Node flag = head;
		//循环找到pos位置的节点
		for(int k=0;k<pos;k++){
			flag = flag.Next;
		}
		//复制一个要获取的节点,但next指向null
		Node temp = new Node();
		temp.data = flag.data;
		temp.Next = null;
		return temp;
	}
	//获取元素个数的方法
	public int getSize(){
		return count;
	}
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics