双向链表的增删改查和反向遍历
双向链表的增删改查和反向遍历
双向链表:一个节点中既有上一个节点的内存地址又有下一个节点的内存地址,还有数据域
首先:我们需要一个节点类来展示节点信息:
class HNode{
public String name;
public int no;//根据这个编号来查找,修改,删除,添加元素
public HNode next;//下一个节点的信息
public HNode pre;//上一个节点的信息
public HNode(String name, int no) {
this.name = name;
this.no = no;
}
@Override
public String toString() {
return "姓名" +
name + '\'' +
"编号" + no
;
}
}
接下来创建一个双向链表类来实现增删改查
class TwoWayLinkedList{
HNode head=new HNode("",0);//定义一个空的头结点
接下来就是增删改操作了,关于实现的一些细节在代码注释里了
public void add(HNode newHNode){
HNode temp=head;//头节点不能移动,用一个temp指针来遍历双向链表
while(true)
{
if(temp.next==null)//找到了最后
{
break;
}
temp=temp.next;
}
temp.next=newHNode;//最后一个节点的下一个节点就是新加的节点
newHNode.pre=temp;//新的节点的前一个节点就是temp
}
来张图可能更好理解一些
public void addByNo(HNode newHNode){
HNode temp=head;
boolean flag=false;//判断条件
while(true)
{
if(temp.next==null)
{
break;
}
if(newHNode.no
{
break;
}
if(newHNode.no==temp.next.no)
{
flag=true;//如果编号重复就标记一下
break;
}
temp=temp.next;
}
if(flag)
{ System.out.println("编号重复,添加失败~~");
}
else{
newHNode.next=temp.next;//新节点的下一个节点为temp的下一个节点
temp.next=newHNode;//temp的下一个节点为新的节点,相当于中间插入了一个节点
}
}
//修改元素,通过no定位
public void modify(int no,String name){
HNode temp=head;
boolean flag=false;
if(temp.nextnull)
{
System.out.println(“链表已空修改失败”);
return;
}
while(true)
{
if(temp.nono)
{
break;
}
if(temp.next==null){
flag=true;
break;
}
temp=temp.next;
}
if(flag){
System.out.println(“没有找到要修改的元素呢”);
}
else {
temp.name=name;
}
}
//显示元素
public void show(){
HNode temp=head;
if(head.next==null)
{
System.out.println("链表为空!");
return ;
}
while(true)
{
if(temp.next==null)
{
break;
}
System.out.println(temp.next);
temp=temp.next;
}
}
//从尾到头遍历
public void showByReverse(){
HNode temp=head;
HNode temp2;
while(true)
{
if(temp.next==null)
{
temp2=temp;
break;
}
temp=temp.next;
}
while(true)
{
if(temp2.pre==null)
{
break;
}
System.out.println(temp2);
temp2=temp2.pre;
}
}
双向链表的增删改查和反向遍历相关教程
SQLAlchemy -orm、Flask数据库的增删改查、sqlalchemy 常用数据
SQLAlchemy -orm、Flask数据库的增删改查、sqlalchemy 常用数据类型、 column常用参数和聚合函数 使用orm创建表格 连接数据库 创建Base基类 创建类,添加属性,添加数据类型约束 创建session 添加创建实例添加数据 添加数据到数据库 提交数据 def add_data():
237. 删除链表中的节(python)力扣
237. 删除链表中的节(python)力扣 解题:我们要删掉的就是node:A,怎么删掉该节点呢,无法直接删除节点A,可以用后面的B把这个node覆盖掉,然后用它的下下个地址node C来作为node A的下一个地址,其实是要删掉的节点被覆盖了B的值苟且偷生,真正删掉的却是
剑指offer第52题 两个链表的第一个公共节点
剑指offer第52题 两个链表的第一个公共节点 文章目录 问题描述: 解题思路: 代码实现: 问题描述: 输入两个链表,找出它们的第一个公共节点。 如下面的两个链表: 在节点 c1 开始相交。 示例 1: 输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,
双向循环链表(C语言实现)
双向循环链表(C语言实现) 双向循环链表 我们知道单链表对于最后一个元素的删除和插入是很不方便的,需要一直遍历到最后一个元素才行,而双向循环链表只需要找到,头节点的上一个元素的地址即可 双向循环链表中每一个元素块都有两个指针prev和next,prev连接它
数据结构45:树的链表实现
数据结构45:树的链表实现 实现树:节点链接法 同样可以用 节点链接法 实现树 每个节点保存根节点的数据项,以及指向左右子树的链接 定义一个BinaryTree类,成员key保存根节点的数据项,成员left/rightChild则保存指向左/右子树的引用(同样是BinaryTree对象
【剑指offer】06. 从尾到头打印链表
【剑指offer】06. 从尾到头打印链表 题目描述 力扣 牛客 // 输入一个链表的头节点,从尾到头反过来返回每个节点// 的值(用数组返回)。 题解 牛客 // 逐元素存储// 时间复杂度:14ms// 空间复杂度:9524KBimport java.util.ArrayList;import java.util.Colle
Flask-sqlalchemy增删改查之(查询数据)
Flask-sqlalchemy增删改查之(查询数据) sqlalachemy 的查询语法较多,我们接下来可以通过一个案例来进行综合演练 案例说明: 案例中包含一个模型类 User, 对应 users表, 包含四个字段: id(主键), name, email, age 首先运行案例代码, 生成测试数据 程序启动
剑指 Offer 25. 合并两个排序的链表
剑指 Offer 25. 合并两个排序的链表 LeetCode: 剑指 Offer 25. 合并两个排序的链表 遍历两条链表,比较两条之间谁的值更小,那么当前节点 node 的 next 就指向 更小的那个节点, 为了方便根据值直接new ListNode(int val)了。 直到其中一条/或两条都遍历完