线性表的链式实现,只包含一些简单的操作,缺少严谨。
只做思路参考。
/**
* 线性表的简单链式实现
*
* @author mkii
*/
public class LinList {
// 头结点
private Node nodes;
/**
* 结点实际的内容结构
*
*/
class Node {
private String data;
private Node next;
public Node() {
data = null;
next = null;
}
public Node(String data, Node next) {
this.data = data;
this.next = next;
}
public String getData() {
return data;
}
public Node getNext() {
return next;
}
}
/**
* 初始化链表
*
*/
public void initLinkedList(){
nodes = new Node();
}
private Node getLastNode(){
Node p = nodes;
while (p.next != null){
p = p.next;
}
return p;
}
/**
* 根据data获取结点
*
* @param data 目标数据
* @return Node
*/
private Node getNode(String data){
if (data == null){
System.out.println("数据为null!");
return null;
}
Node p = nodes;
while (p.next != null){
if(data.equals(p.getData())){
return p;
}
p = p.next;
}
System.out.println("未找到符合条件的结点!");
return null;
}
/**
* 根据data获取上一个结点
*
* @param data
* @return
*/
private Node getPreNode(String data){
if (data == null){
System.out.println("数据为null!");
return null;
}
Node p = nodes;
while (p.next != null ){
if(data.equals(p.next.getData())){
return p;
}
p = p.next;
}
System.out.println("未找到符合条件的结点!");
return null;
}
/**
* 添加结点
*
* @param data
*/
public void addNode(String data){
Node node = new Node(data, null);
Node lastNode = getLastNode();
lastNode.next = node;
System.out.println("添加结点!");
}
/**
* 删除结点
*
* @param data
*/
public void deleteNode(String data){
if (data == null){
System.out.println("数据为null!");
return ;
}
Node p = nodes;
while (p.next != null ){
if(data.equals(p.next.getData())){
p.next = p.next.next;
p.next.next = null;
System.out.println("删除成功!");
return;
}
p = p.next;
}
System.out.println("未找到符合条件的结点!");
}
/**
* 更新结点的数据域
*
* @param data
* @param target
*/
public void updateNode(String data, String target){
Node node = getNode(data);
if(node != null) {
node.data = target;
}
}
/**
* 以字符串形式查看链表内容
*
* @return
*/
public String readLinkedList(){
StringBuilder builder = new StringBuilder();
String spliteChar = ", ";
for (Node p = nodes.next; p != null; p = p.next){
builder.append(p.data);
builder.append(spliteChar);
if (p.next == null){
break;
}
}
return builder.toString();
}
/**
* 测试
*
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception{
LinList linList = new LinList();
linList.initLinkedList();
linList.addNode("aa");
linList.addNode("bb");
linList.addNode("cc");
System.out.println(linList.readLinkedList());
linList.deleteNode("bb");
linList.updateNode("aa", "AA");
System.out.println(linList.readLinkedList());
}
}
纯属手打,如果遗漏错误,请指正!
源码可以上我的码云拿:https://gitee.com/mkii/studyTree/