单链表是一种链式存储结构,主要分为数据域和指针域。
方式也有带头结点和不带头节点,两种方式主要取决于实际情况。
eg: 这里采用带头结点的方式来进行如下的编程
(1) 按尾插法的方式来添加节点;
// 按照尾插法来添加数据
public class SingleLinkedListTest {
public static void main(String[] args) {
HeadNode node1 = new HeadNode(1, "lbb", 23);
HeadNode node2 = new HeadNode(2, "whr", 22);
HeadNode node3 = new HeadNode(3, "ybr", 21);
HeadNode node4 = new HeadNode(4, "wyr", 25);
HeadNode node5 = new HeadNode(5, "zxc", 24);
HeadNode node6 = new HeadNode(4, "qyh", 25);
SingleLinkedList link = new SingleLinkedList();
link.addLinkNode(node1);
link.addLinkNode(node2);
link.addLinkNode(node5);
link.addLinkNode(node4);
link.addLinkNode(node3);
link.showNode();
}
}
// 添加后继节点
class SingleLinkedList {
// 头节点信息
private HeadNode head = new HeadNode(0, "", 0);
// 使用尾插法来添加节点信息
public void addLinkNode(HeadNode node) {
HeadNode temp = head;
while (true) {
// 判断是否为最后一个节点
if (temp.nextList == null) {
break;
}
// 否则,向后移动
temp = temp.nextList;
}
temp.nextList = node; // 将末尾指针指向新节点
}
// 遍历节点信息
public void showNode() {
HeadNode temp = head.nextList;
if (temp == null) {
return;
}
while (temp != null) {
System.out.println(temp);
temp = temp.nextList;
}
}
}
// 创建头节点信息(数据域)
class HeadNode {
public int no;
public String name;
public int age;
public HeadNode nextList;
public HeadNode(int no, String name, int age) {
this.no = no;
this.name = name;
this.age = age;
}
// 重写toString()方法
public String toString() {
return "[ no:" + no + ", name:" + name + ", age:" + age + " ]";
}
}
(2) 按自己的需求来指定输出的先后顺序。
// 在SingleLinkedList 中重写添加方法即可。
// 按照指定需求来添加节点
public void addByOrder(HeadNode node1) {
// 头节点不能动
// 新加入的节点,按照编号顺序来查找要添加的位置
HeadNode temp = head;
boolean flag = false;
while (true) {
if (temp.nextList == null) {
break;
}
if (temp.nextList.no == node1.no) {
flag = true;
break;
}else if (temp.nextList.no > node1.no) {
break;
}
temp = temp.nextList;
}
if (flag){
System.out.printf("存在相同节点,不能再添加,no为%d,名字为%s的信息!!\n", node1.no, node1.name);
return;
}else
{
node1.nextList = temp.nextList;
temp.nextList = node1;
}
}