不带头节点的单链表的实现
程序员文章站
2022-03-15 18:14:14
...
class Link<T> {
//指向单链表的第一个节点
private Entry<T> head;
public Link() {
this.head = null;
}
/**
* 单链表的头插法
*
* @param val
*/
public void insertHead(T val) {
Entry<T> newNode = new Entry<>(val, null);//节点类型
this.head = newNode;
}
/**
* \
* 单链表的尾插法
*
* @param val
*/
public void insertTail(T val) {
Entry<T> newNode = new Entry<>(val, null);
if (head == null) {
head = newNode;
return;
}
Entry<T> cur = head;
while (cur.next != null) {
cur = cur.next;
}
cur.next=newNode;
}
/**
* 单链表中删除值为val的节点
*/
public void remove(T val) {
Entry<T> pre = null;
Entry<T> cur = this.head;
while (cur.data != val) {
pre = cur;
cur = cur.next;
}
if (pre == null) {
//删除的是第一个节点
this.head = this.head.next;
} else {
//删除的是第一个节点之外的其他节点
pre.next = cur.next;
}
}
/**
* 打印单链表的所有元素的值
*/
public void show (){
Entry<T> node = this.head.next;
Entry<T> cur = this.head;
while (node != null) {
System.out.println(cur.data);
cur = cur.next;
}
}
/**
* 单链表的节点类型
*
* @param <T>
*/
private static class Entry<T> {
T data; // 链表节点的数据域
Entry<T> next; // 下一个节点的引用
public Entry(T data, Entry<T> next) {
this.data = data;
this.next = next;
}
}
}
上一篇: Intel酷睿i5-12490F曝光:中国市场特供大缓存版
下一篇: 电脑配置参考