单链表
2021/7/19 6:07:46
本文主要是介绍单链表,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
对于数据结构来说,是用来存取数据的。
算法是针对于数据结构的应用,而算法的设计又要以数据结构为载体来进行创建。
想要以单链表来操作数据,最常用的是增删改查。
链表属于线性结构,在逻辑上是相邻的数据结构,但是在物理上有可能又是毫无关系的。
在对链表进行操作的时候,有一个头节点是非常容易来进行操作的。
但是对于添加来说,一定要注意空指针的异常,所以要在进行添加的时候要利用好head头结点。
定义结点
public class PersonNode { public Integer id; public String personName; public PersonNode next; public PersonNode(Integer id, String personName, PersonNode next) { this.id = id; this.personName = personName; this.next = next; } public PersonNode(Integer id, String personName) { this.id = id; this.personName = personName; } @Override public String toString() { return "PersonNode{" + "id=" + id + ", personName='" + personName + '\'' + ", next=" + next + '}'; } }
定义链表:
public class PersonNodeList { private PersonNode head = new PersonNode(-1,null,null); public void add(PersonNode node){ PersonNode temp = head; while (true){ if (temp.next==null){ break; } // 因为程序执行到了这里,那么这里temp.next一定不会再试null了,不然就已经终止了 temp = temp.next; } temp.next = node; } public void orderAdd(PersonNode node){ PersonNode temp = head; while (true){ // 确定终止条件 // 经过第一步操作之后,表明了链表中已经有数据了 // 首先确定,到大了最后,也没有发现大于它节点。 if (temp.next==null){ break; } if (temp.next.id == node.id){ throw new RuntimeException("不能存在着相同的id"); } // 如果当前节点的下一个节点大于,那么需要进行插入 if (temp.next.id > node.id){ break; } // 都不满足,继续循环 temp = temp.next; } // 两种情况,第一个节点是空和最后一个节点是空的操作都是一样的 node.next = temp.next; temp.next = node; } public void show(){ PersonNode p = head.next; if (p==null){ System.out.println("空链表"); } while (p!=null){ System.out.println("节点的id是:---->"+p.id+",对应的name是:---"+p.personName); p = p.next; } } public void update(PersonNode node){ PersonNode p = head.next; boolean flag = false; while (true){ // 这个是因为没有找到 if (p==null){ break; } // 这个是基于上面来的 if (p.id == node.id){ flag = true; break; } p = p.next; } if (flag){ p.personName = node.personName; }else { System.out.println("没有找到对应的节点"); } } public void deleteById(Integer id){ PersonNode t = head; boolean flag = false; while (true){ if (t.next==null){ break; } if (t.next.id==id){ flag = true; break; } t=t.next; } if (flag){ t.next = t.next.next; }else { System.out.println("没有找到"); } } }
对应的操作:
public class PersonListTest { public static void main(String[] args) { PersonNodeList personNodeList = new PersonNodeList(); personNodeList.orderAdd(new PersonNode(1,"guang")); personNodeList.orderAdd(new PersonNode(3,"meng")); personNodeList.orderAdd(new PersonNode(2,"xiang")); personNodeList.orderAdd(new PersonNode(17,"xiang")); personNodeList.orderAdd(new PersonNode(-9,"xiang")); personNodeList.update(new PersonNode(-9,"jiayi")); personNodeList.deleteById(-9); personNodeList.show(); } }
这篇关于单链表的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-28MQ底层原理资料详解:新手入门教程
- 2024-11-28MQ项目开发资料详解:新手入门教程
- 2024-11-28MQ项目开发资料详解:入门与初级用户指南
- 2024-11-28MQ消息队列资料入门教程
- 2024-11-28MQ消息队列资料:新手入门详解
- 2024-11-28MQ消息中间件资料详解与应用教程
- 2024-11-28MQ消息中间件资料入门教程
- 2024-11-28MQ源码资料详解与入门教程
- 2024-11-28MQ源码资料入门教程
- 2024-11-28RocketMQ底层原理资料详解