1. 链表是以节点的方式来存储的 2.链表的每个节点 有data域(放数据的域),next域 (指向它的下一个节点)
头节点150指向 150的data,而150的next域指向110 ,110->180 3. 并不一定是连续存储的 4.链表分带头节点的和无头节点的链表
好友的id号发过去 按照编号的顺序返回
逻辑存储 因为非连续,逻辑连续 水浒传英雄排名 用链表来实现 带头节点
单链表创建示意图 ,显示单向链表的分析
头节点指向第一个节点
需要一个辅助指针指向头节点
总有next指向下一个, 所以不要打印next
问题所在, 现在打印的顺序是按照add添加的顺序打印的
代码如下 单向链表的实现
public class SingleLinkedListdemo {
public static void main(String[] args) {
//先创建节点
HeroNode heroNode1 = new HeroNode(1, "松江", "及时雨");
HeroNode heroNode2 = new HeroNode(2, "卢俊义", "玉麒麟");
HeroNode heroNode3 = new HeroNode(3, "吴用", "智多星");
HeroNode heroNode4 = new HeroNode(4, "林冲", "豹子头");
//加入 创建链表
SingleLinkedList singleLinkedList = new SingleLinkedList();
singleLinkedList.add(heroNode1);
singleLinkedList.add(heroNode4);
singleLinkedList.add(heroNode2);
singleLinkedList.add(heroNode3);
//显示
singleLinkedList.showLinkNode();
}
}
//定义SingleLinkList
class SingleLinkedList{
//先初始化一个头节点 不能动 不存放具体数据 只找到下一个节点位置
private HeroNode head = new HeroNode(0,"","");
//添加节点到单向链表 当不考虑编号顺序时,找到当前链表的最后节点,将最后的这个节点的next 指向新的节点
public void add(HeroNode heroNode){
//头节点不能动, 需要辅助变量(指针)
HeroNode temp = head;//头节点的属性自带next 本身也是节点
//遍历链表,找到最后
while (true) {//如果.next为空,即找到结尾
if (temp.next == null) {
break;//已经到最后了
}//如果没有找到,就将temp后移动相当于temp指针往后直到next==null
temp =temp.next;
}//当推出while循环时,temp就指向了来年表的最后
//将最后这个节点的next,指向新的节点
temp.next=heroNode;
}
public void showLinkNode(){//需要一个辅助变量,帮助遍历真个链表
if(head.next==null){
return;
}//因为头节点不能动,所以需要辅助变量
HeroNode temp = head.next;
while (true) {
//判断是否是链表的最后
if (temp == null) {
break;
}
System.out.println(temp);
temp=temp.next;
}
}
}
class HeroNode{
//属性和节点信息,每个heronode就算一个节点
public int no;
public String name;
public String nickName;
public HeroNode next;
public HeroNode(final int no, final String name, final String nickName) {
this.no = no;
this.name = name;
this.nickName = nickName;
}
@Override
public String toString() {
return "HeroNode{" +
"no=" + no +
", name='" + name + '\'' +
", nickName='" + nickName + '\'' +
'}';
}
}