Java学习之链表实现
程序员文章站
2022-04-15 19:11:52
链表数据结构之链表一种常见的基础数据结构,是一种线性表,但是并不会按现行的顺序存储数据,而是在每一个节点里存到是下一个节点的指针链表与数组:线性数据结构数组适合查找,遍历,固定长度链表适合插入,删除,不宜过长,否则会导致遍历性能下降。public class test1 { public static void main(String[] args) { NodeManger nm = new NodeManger(); System.out.printl...
链表
数据结构之链表
一种常见的基础数据结构,是一种线性表,但是并不会按现行的顺序存储数据,而是在每一个节点里存到是下一个节点的指针
链表与数组:线性数据结构
数组适合查找,遍历,固定长度
链表适合插入,删除,不宜过长,否则会导致遍历性能下降。
public class test1 {
public static void main(String[] args) {
NodeManger nm = new NodeManger();
System.out.println("-------------add-------");
nm.add(5);
nm.add(4);
nm.add(3);
nm.add(2);
nm.add(1);
nm.print();
System.out.println("---------------del------------");
nm.del(3);
nm.print();
System.out.println("-----------find---------------");
System.out.println(nm.find(6));
System.out.println("-----------updata------------");
nm.upData(1,10);
nm.print();
System.out.println("---------------insert-----------");
nm.insert(2,20);
nm.print();
}
}
public class NodeManger {
private Node root;//根节点
private int currentIndex = 0; //节点的序号.每次操作从0开始
public void add(int data){
if (root == null){
root = new Node(data);
}else {
root.addNode(data);
}
}
//删除
public void del(int data){
if (root == null) return;
if (root.getData() == data){
root = root.next;
}else {
root.delNode(data);
}
}
public void print(){
if (root != null){
System.out.print(root.getData() + "--->");
root.printNode();
System.out.println();
}
}
//查找是否存在节点
public boolean find(int data){
if (root == null) return false;
if (root.data == data){
return true;
}else {
return root.findNode(data);
}
}
public boolean upData(int olddata,int newdata){
if (root == null) return false;
if (root.getData() == olddata){
root.setData(newdata);
return true;
}else {
return root.updataNode(olddata,newdata);
}
}
//向索引之前插入
public void insert(int index,int data){
if (index < 0 ) return;
currentIndex = 0;
if (index == currentIndex){
Node newNode = new Node(data);
root.next = newNode;
newNode.next = root;
root = newNode;
}else {
root.insertNode(index,data);
}
}
private class Node{
private int data;
private Node next;//把当前类型作为属性
public Node(int data) {
this.data = data;
}
public void setData(int data) {
this.data = data;
}
public int getData() {
return data;
}
//添加节点
public void addNode(int data){
if (this.next == null){
this.next = new Node(data);
}else {
this.next.addNode(data);
}
}
//删除节点
public void delNode(int data){
if (this.next!=null){
if (this.next.data == data){
this.next = this.next.next;
}else {
this.next.delNode(data);
}
}
}
//输出所有
public void printNode(){
if (this.next != null){
System.out.print(this.next.data+"--->");
this.next.printNode();
}
}
public boolean findNode(int data){
if (this.next != null){
if (this.next.data == data){
return true;
}else {
return this.next.findNode(data);
}
}
return false;
}
public boolean updataNode(int olddata, int newdata){
if (this.next != null){
if (this.next.getData() == olddata){
this.next.data = newdata;
return true;
}else {
return this.next.updataNode(olddata,newdata);
}
}
return false;
}
public void insertNode(int index,int data){
currentIndex++;
if (index == currentIndex){
Node newNode = new Node(data);
newNode.next = this.next;
this.next = newNode;
}else {
this.next.insertNode(index,data);
}
}
}
}
本文地址:https://blog.csdn.net/qq_44752162/article/details/107595219
上一篇: 第二周学习记录之面向对象
下一篇: 生玉米要蒸多久?玉米怎么保存?