Java数组列表和链表的自定义写法

本文介绍了如何使用Java自定义实现数组列表和链表。在数组列表部分,通过创建新数组实现增删改查操作,详细讲解了添加、删除和修改元素的步骤。对于链表,重点讨论了单向链表的构建,阐述了添加新元素、移除元素及查找节点的方法,并提供了操作演示和输出结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数组列表

由于数组的长度是固定的,所以为了能够做到在增删改查,我们数组创建了一个数组列表。

用数组写数组列表思路:

如果是添加一个元素,就创建一个新的数组比原来的长度大一个单位,把所有之前的元素一个个遍历到新的数组中,然后添加新的元素到最后的位置。

添加元素的实现:
public class DesignArrList implements DesignList{
	int size;
	Object [] arry = new Object[size];

	public void add(Object value) {
		//System.out.println(size+1);
		// TODO Auto-generated method stub
		Object [] arryplus = new Object[size+1];
		for (int i = 0;i<arry.length;i++) {
			arryplus[i] = arry[i];
		}
		arryplus[size] = value;
		arry = arryplus;
		size+=1;
	

	}
删除元素的实现:
	public Object remove(int index) {
		int j = 0;
		Object z ;
		z = arry[index];
		Object [] arryminus = new Object[size-1];
		for (int i = 0; i<arryminus.length;i++) {
			if (i==index || j == 1) {
				arryminus[i] = arry[i+1];
				j=1;
			}
			else {
				arryminus[i] = arry[i];
				
			}
		}
		arry = arryminus;
		size-=1;
		return z;
		
	}
修改元素的实现:
	public Object edit(int index, Object update) {
		// TODO Auto-generated method stub
		Object old = null;
		for (int i = 0; i<arry.length;i++) {
			if (i==index) {
				old = arry[i];
				arry[i]=update;
			}
		}
		return old;
	}

链表

链表有单向、双向、循环链表,各自都有不同的功能。

用节点写单链表思路:

这里描述的是单向链表,类似于每个数据都储存在单个节点中,如果要添加一个新的数据,就创建一个新的节点,然后由上一个节点的next连接新的节点。这样的好处每添加一个新的节点就只用添加一个,然后连接,并不需要像数组列表那样要再创建一个新的数组再添加到后一位。
单链表


public class Node {

	public Object data;
	public Node next;
	
	public Node(Object data) {
		this.data = data;

	}
	
}

data用来储存数据,next用来指向下一个节点,一个个链接形成链表

添加元素的实现:
	public void add(Object o) {
		// TODO Auto-generated method stub
		Node newNode = new Node(o);
		
		//判断链表中 头节点是否有节点数据
		Node head = first.next;
		if (head == null) {
			first = newNode;
			first.next = newNode;
			last = newNode;
			}
		else {
			last.next = newNode;
			last = newNode;
			//System.out.println("last: "+last);
		}
		size++;
		
	}
除去元素的实现:
	public void remove(int index) {
		Node node = first;
		if (index == 0) {
			first = first.next;
			size-=1;
			
			return;
		}
		if (index == size -1) {
			int j = 0;
			while (node != null && j < size - 2) {
			
				node = node.next;
				j+=1;
			}
			last = node;
			last.next = null;
			System.out.println(last.data);
			size-=1;	
			
			
			return;
		}
		if (index < size -1 && index >0) {
			int j = 0;
			while (node != null && j < index - 1) {
				node = node.next;
				j+=1;
			}
		//	System.out.println("00000: "+node.data);
			node.next = node.next.next;
		//	System.out.println("node.next: "+node.next);
			size-=1;
		}
		
	}
寻找节点方法的实现:
	public void printNode(Node node) {
		while (true) {
		if (node != null) {
			System.out.println("LinkList: "+node.data);
			node = node.next;
		}
		else {
			break;
		}
	}
	}
演示:
public class Main {
	
	public static  void main(String []args) {

		MyLinkList ls = new MyLinkList();

		ls.add(1);
     	ls.add(2);
		ls.add(3);
		ls.add(4);
		ls.add(5);
		ls.add(6);
		ls.remove(4); 
		ls.remove(1); 
		ls.printNode(ls.first);
	//	System.out.println("lastx: "+ls.last.data);
		//System.out.println(ls.first.data);

	}
输出:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值