package com.fpy.linked;
public class LinkedTest {
public static void main(String[] args) {
SingleLinkedList s1 = new SingleLinkedList();
System.out.println("====================添加========================");
s1.addByNo(new HeroNode(1, "111", "1111"));
s1.addByNo(new HeroNode(3, "333", "3333"));
s1.addByNo(new HeroNode(2, "222", "2222"));
s1.addByNo(new HeroNode(2, "new 222", "new 2222"));
s1.show();
System.out.println("====================更新========================");
s1.updatNode(new HeroNode(1, "new 1111", "new 1111"));
s1.updatNode(new HeroNode(5, "new 5555", "new 5555"));
s1.show();
System.out.println("=====================删除=======================");
s1.del(1);
s1.show();
}
}
class HeroNode {
int no;
String name;
HeroNode next;
String nickName;
public HeroNode(int no, String name, String nickName) {
this.no = no;
this.name = name;
this.nickName = nickName;
}
@Override
public String toString() {
return "HeroNode{" +
"no=" + no +
", name='" + name + '\'' +
", nickName='" + nickName + '\'' +
'}';
}
}
class SingleLinkedList {
//初始化一个头部文件
private HeroNode head = new HeroNode(0, "", "");
/**
* 获取头结点
*
* @return
*/
public HeroNode getHead() {
return head;
}
/**
* 删除指定编号的节点
* @param no 需要删除的编号
*/
public void del(int no){
//删除节点前一个节点的next 指向删除节点的后一个节点
HeroNode tmp = head;
boolean flag = false;
while (tmp.next!=null){
if(tmp.next.no==no){
//找到要删除的节点
flag=true;
break;
}
tmp = tmp.next;
}
if(flag){
tmp.next=tmp.next.next;
}else{
System.err.println("么有此编号的节点\t:"+no);
}
}
/**
* 添加结点 按照编号顺序输出
*
* @param heroNode
*/
public void addByNo(HeroNode heroNode) {
HeroNode tmp = head;
//当下一个结点有值时 继续遍历 没有时添加
while (tmp.next != null) {
if (tmp.next.no == heroNode.no) {
System.out.println("编号错存在不能添加,编号是:" + heroNode.no);
return;
} else if (tmp.next.no > heroNode.no) {//找到添加的位置
break;
}
tmp = tmp.next;
}
//当前结点的next 指向下一个结点
heroNode.next = tmp.next;
//当前结点的位置插入到之前的位置
tmp.next = heroNode;
}
/**
* 更新结点
* @param heroNode
*/
public void updatNode(HeroNode heroNode) {
HeroNode tmp = head;
//当下一个结点有值时 继续遍历 没有时添加
while (tmp.next != null) {
if (tmp.next.no == heroNode.no) {
tmp.next.name=heroNode.name;
tmp.next.nickName=heroNode.nickName;
return;
}
tmp = tmp.next;
}
System.err.println("不存在此编号的节点\t"+heroNode.no);
}
//添加结点 不考虑编号
public void addNode(HeroNode heroNode) {
HeroNode tmp = head;
while (tmp.next!=null){
tmp=tmp.next;
}
tmp.next=heroNode;
}
/**
* 遍历链表
*/
public void show() {
if (head.next == null) {
System.out.println("此链表无数据");
return;
}
HeroNode node = head.next;
while (node != null) {
System.out.println(node.toString());
node = node.next;
}
}
}
效果图