public class Test19 {
/*
* 链表数据(存储)结构:LinkList
* 每个节点:存储data(数据)、pointer(指针),指针指向下一个节点。
* (1)根节点
* (2)下一个节点
* */
public static void main(String[] args) {
NodeMange nm = new NodeMange();
nm.add(5);
nm.add(4);
nm.add(3);
nm.add(2);
nm.add(1);
nm.print();
nm.del(1);
nm.print();
boolean b = nm.find(3);
System.out.println(b);
boolean update = nm.update(2, 9);
System.out.println(update);
nm.print();
nm.insert(1,100);
nm.print();
}
}
class NodeMange{
private Node root;//根节点
private int currentIndex=0;//节点的序号,每次操作从0开始
//添加节点
public void add(int data){
if (root==null){
root = new Node(data);
}else {
root.addNote(data);
}
}
//删除节点
public void del(int data){
if (root==null)return;
if (root.data==data){
root=root.next;
}else {
root.delNote(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 update(int oldData,int newData){
if (root==null)return false;
if (root.data==oldData){
root.data=newData;
return true;
}else {
return root.updateNode(oldData,newData);
}
}
//向索引之前插入
public void insert(int index,int data){
if (index<0)return;
currentIndex=0;
if (index==currentIndex){
Node newNode = new Node(data);
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 int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
//添加节点
public void addNote(int data){
if (this.next==null){
this.next=new Node(data);
}else {
this.next.addNote(data);
}
}
//删除节点
public void delNote(int data){
if (this.next!=null){
if (this.next.data==data){
this.next=this.next.next;
}else {
this.next.delNote(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 updateNode(int oldData,int newData){
if (this.next!=null){
if (this.next.data==oldData){
this.next.data=newData;
return true;
}else {
return this.next.updateNode(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);
}
}
}
}
【Java随笔】数据结构—链表(递归)
最新推荐文章于 2024-09-15 09:47:04 发布