/**
* author:YinHao
* 单链表
*/
public class SingleLinkedTest {
public static void main(String[] args) {
Node node1 = new Node("王一", 1);
Node node2 = new Node("刘二", 2);
Node node3 = new Node("张三", 3);
Node node4 = new Node("李四", 4);
SingleLinked singleLinked = new SingleLinked();
singleLinked.addNode(node1);
singleLinked.addNode(node2);
singleLinked.addNode(node3);
singleLinked.addNode(node4);
singleLinked.list();
System.out.println("------------------------------------");
singleLinked.updata(new Node("赵六",2));
singleLinked.list();
}
}
/**
* 节点类
*/
class Node {
public String name;
public int id;
public Node next; // 指针域
public Node(String name, int id) {
this.name = name;
this.id = id;
}
@Override
public String toString() {
return "Node{" +
"name='" + name + '\'' +
", id=" + id +
'}';
}
}
/**
* 单链表
*/
class SingleLinked {
private Node head = new Node("", 0); // 头节点
/**
* 添加节点,直接加在链表最后
*
* @param newNode
*/
public void addNode(Node newNode) {
Node temp = head; // 辅助节点
while (true) {
if (temp.next == null) { // 找到最后一个节点
break;
}
temp = temp.next;
}
temp.next = newNode;
}
/**
* 显示链表(遍历实现)
*/
public void list() {
if (head.next == null) { // 判断链表是否为空
System.out.println("链表为空");
return;
}
Node temp = head.next;
while (true) {
if (temp == null) {
break;
}
System.out.println(temp);
temp = temp.next;
}
}
/**
* 根据顺序插入节点
*/
public void addNodeByOrder(Node newNode) {
Node temp = head; // 辅助节点
boolean flag = false; // 考虑添加的节点是否存在
while (true) {
if (temp.next == null) {
break;
}
if (temp.next.id > newNode.id) { // 位置找到
break;
} else if (temp.next.id == newNode.id) {
flag = true;
}
temp = temp.next;
}
if (flag) {
System.out.println("该节点已存在");
} else {
newNode.next = temp.next;
temp.next = newNode;
}
}
/**
* 根据编号删除
*/
public void del(int no) {
Node temp = head;
boolean flag = false;
while (true) {
if (temp.next == null) {
break;
}
if (temp.next.id == no) {
flag = true;
break;
}
temp = temp.next;
}
if (flag) {
temp.next = temp.next.next;
} else {
System.out.println("没有找到编号为" + no + "的节点");
}
}
/**
* 修改节点
*/
public void updata(Node newNode) {
Node temp = head;
if (temp.next == null) {
System.out.println("链表为空");
return;
}
boolean flag = false;
while (true) {
if (temp == null) {
break;
}
if (temp.id == newNode.id) {
flag = true;
break;
}
temp = temp.next; // 指针后移
}
if (flag) {
temp.name = newNode.name;
}else {
System.out.println("没有找到id为"+newNode.id+"的节点");
}
}
}
总结:通过上述单链表代码,可以得出需要对节点指针域进行改变的时候,找目标节点的前一个。
例如上述代码中的删除与根据id插入