单链表
链表每个节点包含data域,next域:指向下一个节点
创建HeroNode类,其中包含HeroNode next;
创建LinkedList类,先创建一个头节点
遍历思路:
通过一个辅助变量来遍历
一般来说,展示链表中所有数据要先判断链表是否为空。
添加内容思路:
-
直接添加到尾部:直接加到最后面(遍历找到最后面,再添加)
-
按顺序添加:找到要添加的位置,新节点.next = temp.next,temp.next = 新节点。
修改节点的思路:
-
先找到这个节点(遍历)
-
修改数值
删除节点的思路:
-
找到要删除节点的前一个节点
-
Node.next = node.next.next;
-
被删除的节点将没有其他引用指向它,会被垃圾回收机制回收
循环要注意的点!!!
一般来说,写while循环的时候,内容的顺序是:1)输出,2)if边界的break测试,3)指针后移
循环代码:
void show(){
NodeStack temp = head.next;
while(true){
System.out.println("栈中的值为"+temp.value);
if(temp.next == null){
break;
}
temp = temp.next;
}
}
单链表代码:
package com.dataStructure;
public class linkedList {
public static void main(String[] args){
HeroNode heroNode1 = new HeroNode(1,"阿毛","amao");
HeroNode heroNode2 = new HeroNode(2,"阿狗","agou");
HeroNode heroNode3 = new HeroNode(3,"阿缺","aque");
singleLinkedList list_test = new singleLinkedList();
//乱序输入结果
list_test.addSpecial(heroNode1);
list_test.addSpecial(heroNode3);
list_test.addSpecial(heroNode2);
list_test.show();
//测试修改
HeroNode heroNode4 = new HeroNode(3,"阿","a");
list_test.update(heroNode4);
System.out.println("修改后的结果~~~");
list_test.show();
//删除测试
int test_num = 1;
list_test.del(test_num);
System.out.println("删除后的结果");
list_test.show();
}
}
class HeroNode{
int no;
String name;
String nickName;
HeroNode next;
public HeroNode(int no,String name,String nickName){
this.no = no;
this.name = name;
this.nickName = nickName;
}
@Override
public String toString(){
return "Hero_no = "+no+" Hero_name = "+name+" Hero_nickname = "+nickName ;
}
}
class singleLinkedList{
private HeroNode head = new HeroNode(0,"",""