public class LinkedList {
public static void main(String[] args) {
PersonNode p1=new PersonNode(1,"a");
PersonNode p2=new PersonNode(2,"b");
PersonNode p3=new PersonNode(3,"c");
PersonNode p4=new PersonNode(4,"d");
PersonNode p5=new PersonNode(5,"e");
Singlelinkedlist singlelinkedlist=new Singlelinkedlist();
singlelinkedlist.add(p1);
singlelinkedlist.add(p2);
singlelinkedlist.add(p3);
singlelinkedlist.add(p4);
singlelinkedlist.add(p5);
singlelinkedlist.show();
}
}
class Singlelinkedlist{
//初始化一个头结点 这个head节点不能动 只能用辅助变量代替其作用
private PersonNode head=new PersonNode(0,"头结点");
//添加链表的方法
public void add(PersonNode personNode){
//找到当前链表的最后节点 把这个节点指向新的节点
PersonNode temp=head;
while(true){
if(temp.next==null){
break;
}
//没找到 就一直后移 直到退出循环 指向链表的最后
temp=temp.next;
}
temp.next=personNode;
}
public void show(){
if(head.next==null){
System.out.println("链表为空");
return;
}
PersonNode node=head.next;
while(true){
if(node==null){
break;
}
System.out.println(node);
node=node.next; }
}
}
class PersonNode{
//定义一个节点类
int no;
String name;
PersonNode next;
//每一个节点都指向节点属性
public PersonNode(int no, String name) {
this.no = no;
this.name = name;
}
@Override
public String toString() {
return "PersonNode[" + "no=" + no + ", name='" + name + ']';
}
}
单向链表 :
是以节点的形式存储的 每一个节点包含data数据和next指向下一个节点
链表的各个节点不一定是连续存放的 只是next一个接着一个
链表分为带头结点和不带头结点的
思路分析和代码实现:
对于一个单向链表 需要两个类
一个是节点类
节点类的属性有 next指向下一个节点 name节点名字 no 序号
一个是链表类
在链表中实现遍历和添加元素以上两个方法
对于链表的遍历 首先要看是否是空链表 ------>也就是看head节点的next是否存在
若为null 则退出遍历的操作 不为空 设置中间变量 指向head.next 每一次递增直到退出循环为止
对于链表元素的添加 首先要判断是否为最后一个节点 如果已经加到了最后 则无法继续添加
不是最后一个节点的情况下 就把传入的元素赋值给 当前节点的next