写一个简单的Linkedlist,实现增删改查

linkedlist和arraylist一样都是实现了list,只是它们底层不同,一个是数组一个是链表,就造就了它们的一些特性不同

linkedlist增删快,查找慢。主要是因为链表查找要将链表遍历一边找到该数据输入。当要删除时,只需要将其结点的前后两个结点连接起来即可

package Array;

import java.util.NoSuchElementException;

public class MyLinkedList {
private class Node{
	T t;
	Node next;//后继
	Node prev;//前驱
	Node(T t){
		this.t=t;
	}
}
Node frist;
Node last;
int size;//链表长度
public MyLinkedList() {
	frist=last=null;
}
//加一个元素
public void add(T t) {
	Node n=new Node(t);
	if(last==null) {
		frist=n;
		last=n;
	}else {
	last.next=n;//最后一个元素下一个为此次添加的元素
	n.prev=last;//添加元素的前驱指前一个元素
	last=n;//此时最后一个元素为刚添加进入的
	}
	size++;
}
//添加元素到第一个
public void addFrist(T t) {
	Node f=new Node(t);	
	if(last==null) {
		frist=f;
		last=f;
	}else {
	f.next=frist;
	frist.prev=f;
	frist=f;
	}
	size++;
}
//将元素添加到最后一个位置
public void linkedFrist(T t) {
	add(t);
}
//删除第一个元素
public void deleteFrist() {
	if(size<1) {
		throw new NoSuchElementException("linked为空,无法进行此操作");
	}
 frist.next.prev=null;
 frist=frist.next;
 size--;
}
//删除最后一个元素
public void deleteLast() {
	if(size<1) {
		throw new NoSuchElementException("linked为空,无法进行此操作");
	}
last=last.prev;
last.next=null;
size--;
}
//删除指定元素
public void delete(T t) {
	Node n=findNode(t);
	n.prev.next=n.next;
	n.next.prev=n.prev;
	size--;
}
//删除指定位置的元素
public void delete(int index) {
	Node n=findex(index);
	n.prev.next=n.next;
	n.next.prev=n.prev;
	size--;
}
//将更改第一个元素,返回其原来的元素
public T setFrist(T t) {
	T t1=frist.t;
	frist.t=t;
	return t1;
}
//更改最后一个元素
public T setLast(T t) {
	T t1=last.t;
	last.t=t;
	return t1;
}
//更改指定位置的元素,返回该位置的元素
public T set(int index,T t) {
	Node n=findex(index);//获取这个位置的结点
	T t1=n.t;
	n.t=t;
	return t1;
}
//获取第一个元素
public T getFrist() {
	if(size()==0) {
		throw new NoSuchElementException("linkedlist为空,无法进行此操作");
	}
	return frist.t;
}
//获取最后一个元素
public T getLast() {
	if(size()==0) {
		throw new NoSuchElementException("linkedlist为空,无法进行此操作");
	}
	return last.t;
}
//获取指定位置的元素
public T get(int index) {
	Node n=findex(index);
	return n.t;
}
//输入指定元素,获取其结点
private Node findNode(T t){
	Node n=frist;
	for(int i=0;i findex(int index) {
	if(index<1||index>size()) {
		
		throw new NoSuchElementException("linkedlist输入错误,无法进行此操作:"+index);
	}
	Node n=frist;
	for(int i=0;i

 

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