Java实现单向链表
package bean;
import java.util.Objects;
/**
* @author lt
* @date 2020-05-06 10:59
* <p>
* 实现单向链表
*/
public class SinglyLinkedList<T> {
// 头节点
private SimpleNode headNode;
/**
* 无参构造,头节点默认为 null
*/
public SinglyLinkedList() {
}
/**
* 有参构造
*
* @param headData 头数据
*/
public SinglyLinkedList(T headData) {
headNode = new SimpleNode(headData);
}
/**
* 判空,头节点为 null 则表示链表中没有存储
*
* @return
*/
public boolean isEmpty() {
return headNode == null;
}
/**
* 新增节点元素
*
* @param newData
*/
public void append(T newData) {
// 链表为空,则赋值头节点
if (isEmpty()) {
headNode = new SimpleNode(newData);
return;
}
SimpleNode lastNode = headNode;
while (lastNode.nextNode != null) {
lastNode = lastNode.nextNode;
}
lastNode.nextNode = new SimpleNode(newData);
}
/**
* 删除节点元素,成功返回 true
*
* @param delData
* @return
*/
public boolean delete(T delData) {
// 如果链表为空,返回 false
if (isEmpty()) {
return false;
}
// 如果是删除头节点,则将头节点赋值为头节点的 nextNode即可
SimpleNode tempNode = new SimpleNode(delData);
if (headNode.equals(tempNode)) {
headNode = headNode.nextNode;
return true;
}
// 若不是头节点,则从头节点开始遍历,找到 元素的data与delData相等
SimpleNode prevNode = headNode;
while (prevNode.nextNode != null) {
// 如果找到,将 prevNode 的 nextNode 指向它 next 的 next
if (tempNode.equals(prevNode.nextNode)) {
prevNode.nextNode = prevNode.nextNode.nextNode;
return true;
}
// 节点下移
prevNode = prevNode.nextNode;
}
// 遍历结束仍未返回,表示链表中无此元素,删除失败
return false;
}
@Override
public String toString() {
return "SinglyLinkedList[" + headNode + ']';
}
// 节点(Inner class)
class SimpleNode {
// 节点数据
T data;
// 下一个节点
SimpleNode nextNode;
public SimpleNode(T data) {
this.data = data;
this.nextNode = null;
}
public SimpleNode() {
this.data = null;
this.nextNode = null;
}
@Override
public String toString() {
return "node{data: " + data + "} ==> " + nextNode;
}
/**
* 重写 equals(),只需要比较 data
* @param o
* @return
*/
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
SimpleNode that = (SimpleNode) o;
return Objects.equals(data, that.data);
}
}
}