java 实现链表
用节点类储存数据。
代码
/**
* 链表储存结构实现顺序表
* @param <E>
*/
public class LinkedList<E> {
// 头节点
private LinkedNode<E> first;
// 尾节点
private LinkedNode<E> last;
// 顺序表内储存的数据个数
private int size = 0;
// 初始化
public LinkedList(){
first = new LinkedNode<>(); // 空的头节点
last = first;
}
// 获取总元素个数
public int getSize(){
return size;
}
// 添加元素
public void add(E e){
LinkedNode<E> node = new LinkedNode<>();
node.setData(e);
last.next = node;
last = node;
size++;
}
// 在某一位置插入数据
public void add(int index, E e){
if(index > size)
System.out.println("插入位置错误!!!");
else{
LinkedNode<E> node = new LinkedNode<>();
LinkedNode<E> head = first;
node.setData(e);
// 找到要插入位置的前一个节点
for(int i = 0;i < index;i ++){
head = head.next;
}
// 插入末尾,改变尾节点
if(index == size){
last = node;
}
node.next = head.next;
head.next = node;
size ++;
}
}
// 删除某一位置的元素
public E remove(int index){
E e = null;
if(index > size - 1 || size == 0)
System.out.println("删除位置错误!!!");
else{
// 找到要删除的节点的前一个
LinkedNode<E> node = first;
for(int i = 0;i < index;i ++){
node = node.next;
}
// 如果删除的是最后一个元素,改变尾节点
if(index == size -1){
last = node;
}
e = node.next.getData();
node.next = node.next.next;
size --;
}
return e;
}
// 删除第一个元素
public E removeFirst(){
return remove(0);
}
// 删除最后一个元素
public E removeLast(){
return remove(size - 1);
}
// 获取某一位置的元素
public E get(int index){
E e = null;
if(index > size - 1 || size == 0)
System.out.println("查找位置错误!!!");
else{
// 找到要查找的节点
LinkedNode<E> node = first.next;
for(int i = 0;i < index;i ++){
node = node.next;
}
e = node.getData();
}
return e;
}
// 获取第一个元素
public E getFirst(){
E e = null;
if(size != 0)
e = first.next.getData();
return e;
}
// 获取第最后一个元素
public E getLast(){
E e = null;
if(size != 0)
e = last.getData();
return e;
}
}
/**
* 链表节点
* @param <E>
*/
public class LinkedNode<E> {
private E data; // 储存的数据
public LinkedNode<E> next;
// 给该节点数据赋值
public void setData(E e){
data = e;
}
// 获取该节点数据值
public E getData(){
return data;
}
}
package 线性表;
/**
* 链表测试类
*/
public class LinkedList_Demo {
// 输出相关数据
public static void print(LinkedList linkedList){
System.out.println("元素个数:" + linkedList.getSize());
System.out.println(linkedList.getFirst());
System.out.println(linkedList.get(1));
System.out.println(linkedList.getLast());
}
public static void main(String[] args){
LinkedList<String> linkedList = new LinkedList<>();
linkedList.add("the");
linkedList.add(0,"hello");
linkedList.add(2,"word!");
print(linkedList);
// 删除两个
linkedList.remove(0);
linkedList.remove(0);
System.out.println("元素个数:" + linkedList.getSize());
// 添加元素
linkedList.add("www");
linkedList.add(0,"http://");
print(linkedList);
}
}
结果:
元素个数:3
hello
the
word!
元素个数:1
元素个数:3
http://
word!
www