java中的LinkedList(链表)与ArrayList(动态数组):(2)尝试简单实现LinkedList

一.对于LinkedList需要方法的简单分析

链表的简单表示从简图中可以看出,要完成对链表的简单实现,首先应先具有一个用于创造节点对象的Node类,在Node类中应至少具有两个属性:
(1).用于保存本节点数据的属性
(2).用于保存下一个节点位置的属性

根据链表面向对象的特点,考虑到对各种类型数据的保存,因此需要创建一个Object对象来储存数据;

除了Node类之外,还需要一个用于储存方法的类,这里我所命名的为MyLinkedList类,在这一类中,需要实现
(1)节点数据的增删
(2)节点数据的查找,获取
(3)链表的长度
这三个基本方法来确保链表至少是可用的。

二.对于LinkedList简单的代码实现

(1)Node类(属性类)

public class Node {
	public Node next;  //保存下一个节点
	public Object data;  //保存数据
	
	public Node(Object data){
		this.data = data;
	}
}

(2).MyLinkedList类(方法类)

public class MyLinkedList<E> implements LinkedList<E>{
	public Node head; //首节点
	public Node last; //尾节点
	public int size=0;  //长度
	
	@Override
	public void add(E obj) {
		//创建节点对象
		Node newNode = new Node(obj);
		//判断首节点是否为空
		if(head == null){
			head = newNode;
			last = newNode;
		}else{
			last.next = newNode;  //保存到尾节点
			last = newNode;       //更新尾节点
		}
		size++;
	}

	@Override
	public E get(int index) {
		if(index<1||index>size)
		return null;
		else{
			Node pass = head;
			for(int i=0;i<index;i++){
				pass = pass.next;
			}
			return (E) pass.data;
		}
	}

	@Override
	public E remove(int index) {
	    if(index<1||index>size){
	    	return null;
	    }
		
		else{Node pass1 = head;
		Node pass2 = head;
		for(int i=0;i<index-1;i++){
			pass1 = pass1.next;//此时pass1为第index个节点
		}
		for(int i=0;i<index-2;i++){
			pass2 = pass2.next;//此时pass2为第index-1个节点
		}
		//将第index+1个节点的数据传入第index-1的next中实现对接
		pass2.next = pass1.next;
		//将第index个的节点数据清零
		pass1 = null;
		return null;}
	}

	@Override
	public void remove(E obj) {
	
		int index = 0;
		Node pass = head;
		for(int i=0;i<size;i++){
			if(pass.data==obj){
				index=i;
			}
			else pass = pass.next;
		}
		
		Node pass1 = head;
		Node pass2 = head;
		for(int i=0;i<index-1;i++){
			pass1 = pass1.next;//此时pass1为第index个节点
		}
		for(int i=0;i<index-2;i++){
			pass2 = pass2.next;//此时pass2为第index-1个节点
		}
		//将第index+1个节点的数据传入第index-1的next中实现对接
		pass2.next = pass1.next;
		//将第index个的节点数据清零
		pass1 = null;
		
		
	}

	@Override
	public int size() {
		Node pass = head;
		while(pass!=null){
			size++;
			pass = pass.next;
		}
		return size;
	}
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值