一:单向链表
单向链表中的节点包含数据域和next指针域。
- 单向链表的增删查改代码实现
HeroNode实体类
package com.linklist;
/**
* @author lizhangyu
* @date 2021/3/6 16:28
*/
public class HeroNode {
public int no;
public String name;
public HeroNode next;
public HeroNode(int no, String name) {
this.no = no;
this.name = name;
}
@Override
public String toString() {
return "HeroNode{" +
"no=" + no +
", name='" + name + '\'' +
'}';
}
}
SingleLinkList实体类
package com.linklist;
/**
* @author lizhangyu
* @date 2021/3/6 16:30
*/
public class SingleLinkList {
HeroNode head = new HeroNode(0, "");
/**
* 遍历
*/
public void list() {
if (head.next == null) {
System.out.println("链表为空");
return;
}
HeroNode cur = head.next;
while (true) {
System.out.println(cur);
if (cur.next == null) {
break;
}
cur = cur.next;
}
}
/**
* 添加
* @param node
*/
public void add(HeroNode node) {
HeroNode cur = head;
while (true) {
if (cur.next == null) {
break;
}
cur = cur.next;
}
cur.next = node;
}
/**
* 查找
* @param no
*/
public HeroNode find(int no) {
HeroNode cur = head.next;
if (cur == null) {
System.out.println("链表为空");
return null;
}
while (true) {
if (cur.no == no) {
System.out.println("找到对应的节点:" + cur);
return cur;
}
if (cur.next == null) {
System.out.println("没有找到对应的节点");
break;
}
cur = cur.next;
}
return null;
}
/**
* 修改
* @param node
*/
public void update(HeroNode node) {
HeroNode oldNode = find(node.no);
if (oldNode != null) {
oldNode.name = node.name;
}else {
System.out.println("由于没有找到对应的节点,所以不能修改");
}
}
/**
* 删除
* @param node
*/
public void delete(HeroNode node) {
HeroNode cur = head;
Boolean flag = false;
while (true) {
if (cur.next == null) {
System.out.println("链表为空");
break;
}
if (cur.next.no == node.no) {
flag = true;
break;
}
cur = cur.next;
}
if (flag) {
cur.next = cur.next.next;
System.out.println("成功删除节点");
}else {
System.out.println("没有找到对应的节点");
}
}
}
SingleLinkListDemo实体类
package com.linklist;
/**
* @author lizhangyu
* @date 2021/3/6 16:43
*/
public class SingleLinkListDemo {
public static void main(String[] args) {
//先创建节点
HeroNode hero1 = new HeroNode(1, "宋江");
HeroNode hero2 = new HeroNode(2, "卢俊义");
HeroNode hero3 = new HeroNode(3, "吴用");
HeroNode hero4 = new HeroNode(4, "林冲");
SingleLinkList singleLinkList = new SingleLinkList();
singleLinkList.add(hero1);
singleLinkList.add(hero2);
singleLinkList.add(hero3);
singleLinkList.add(hero4);
singleLinkList.list();
singleLinkList.find(1);
singleLinkList.find(5);
HeroNode hero5 = new HeroNode(4, "林冲1");
singleLinkList.update(hero5);
singleLinkList.list();
singleLinkList.delete(hero2);
singleLinkList.list();
}
}
测试的结果:
HeroNode{no=1, name='宋江'}
HeroNode{no=2, name='卢俊义'}
HeroNode{no=3, name='吴用'}
HeroNode{no=4, name='林冲'}
找到对应的节点:HeroNode{no=1, name='宋江'}
没有找到对应的节点
找到对应的节点:HeroNode{no=4, name='林冲'}
HeroNode{no=1, name='宋江'}
HeroNode{no=2, name='卢俊义'}
HeroNode{no=3, name='吴用'}
HeroNode{no=4, name='林冲1'}
成功删除节点
HeroNode{no=1, name='宋江'}
HeroNode{no=3, name='吴用'}
HeroNode{no=4, name='林冲1'}
Process finished with exit code 0