一. 本文内容
本文主要总结单链表种一些简单的操作,包括链表结点添加,删除,获取节点信息,打印节点。
二. 实现
Java中单链表采用Node实体类来表示节点。其中data为节点存储的数据,next指向下一个节点。
package com.hnu.linkedlist;
public class Node {
public Object data;
public Node next;
public Node(Object data, Node next) {
this.data = data;
this.next = next;
}
public Node(Object data) {
this.data = data;
}
}
我们有了实体类表示节点后就可以构造链表了
package com.hnu.linkedlist;
/**
* 自定义链表
*/
public class Mylinkedlist<E> {
//头节点
private Node head ;
//链表节点个数
private int size = 0;
/**
* 链尾添加元素
* @param element
*/
public void add(E element){
Node node = new Node(element);
if (head == null){
head = node;
}else {
Node temp = head;
while (temp.next != null){
temp = temp.next;
}
temp.next = node;
}
size++;
}
/**
* 根据索引返回元素
* @param index
* @return
*/
public E get(int index){
checkIndex(index);
Node temp = head;
for (int i = 0; i < index; i++) {
temp = temp.next;
}
return (E)temp.data;
}
/**
* 根据索引删除指定位置元素
* @param index
*/
public void delete(int index){
checkIndex(index);
if (index == 0){
head = head.next;
}else {
Node temp = head;
Node pretemp = null;
for (int i = 0; i < index; i++) {
pretemp = temp;
temp = temp.next;
}
pretemp.next = temp.next;
}
size--;
}
/**
* 插入节点
* @param index
* @param element
*/
public void add(int index , E element){
checkIndex(index);
Node node = new Node(element);
if (index == 0){
node.next = head;
head = node;
}else {
Node temp = head;
Node pretemp = null;
for (int i = 0; i < index; i++) {
pretemp = temp;
temp = temp.next;
}
node.next = temp;
pretemp.next = node;
}
size++;
}
/**
* 返回链表长度
* @return
*/
public int linkedSize(){
return size;
}
/**
* 索引合法性检查
* @param index
*/
public void checkIndex(int index){
if (index < 0 || index > size-1)
throw new IllegalArgumentException("索引数字不合法: "+index);
}
/**
* 打印元素
* @return
*/
@Override
public String toString() {
StringBuilder sb = new StringBuilder("[");
Node temp = head;
while (temp != null){
sb.append(temp.data + ",");
temp = temp.next;
}
sb.setCharAt(sb.length()-1 , ']');
return sb.toString();
}
}
为了方便操作,我们增加了泛型,和对一些合法性检查的操作方法进行了封装。然后我们用测试类对我们创建的链表进行测试
package com.hnu.linkedlist;
public class Test {
public static void main(String[] args) {
Mylinkedlist<String> mylinkedlist = new Mylinkedlist<>();
mylinkedlist.add("a");
mylinkedlist.add("b");
mylinkedlist.add("c");
System.out.println(mylinkedlist.toString());
System.out.println(mylinkedlist.get(2));
mylinkedlist.delete(0);
System.out.println(mylinkedlist.toString());
mylinkedlist.add(0,"d");
System.out.println(mylinkedlist.toString());
System.out.println("链表长度: "+ mylinkedlist.linkedSize());
}
}
运行结果
到此,用java实现一个简单的链表就完成了。欢迎各位大佬们指导学习。