【大厂算法系列】链表实战篇,基于链表编码实现课程信息管理系统

        }
        //辅助指针往下移动
        cur=cur.next;
    }
    cur.next=node;
    node.pre=cur;
    length++;

}

##### 双向链表实战删除与修改课程


* 双向链表删除节点思路分析


![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qgVWeZZZ-1679329108757)(picture/image-20221027161343270.png)]](https://img-blog.csdnimg.cn/e0148e9d399c4f7bb8edb7167dac84a7.png)


* 双向链表修改课程信息(同单链表类似)



//删除课程 根据课程的id
public void delCourse(int id){
//定义辅助变量
CourseNode2 cur=head.next;
if(curnull){
return;
}
//记录是否找到课程
boolean flag=false;
while (cur!=null){
if(cur.id
id){
flag=true;
break;
}
//一直遍历
cur=cur.next;
}
if(flag){
//删除节点
// data1 next->data3
cur.pre.next=cur.next;
//data3 pre->data1
if(cur.next!=null){
cur.next.pre=cur.pre;
}
length–;
}else {
System.out.printf(“要删除的节点%d没有找到”,id);
}
}


* **对单链表与双链表的相关操作进行时间复杂度分析**
* 删除节点时


	+ 单链表删除节点的时候,需要找到前驱节点,也就是通过遍历的方式得到。单链表的增删操作复杂度是O(n).
	+ 双向链表删除节点的时候,因为是双向的,直接通过pre就可以得到前驱节点,不用进行遍历,时间复杂度是O(1)
	+ 如果只知道要删除的双链表节点的序号,那一样要遍历,时间复杂度是O(n)
* 插入节点时


	+ 单链表与双链表的插入都要找到前驱节点,需要遍历找到的话时间复杂度就是O(n),给了前驱节点复杂度就是O(1)
* 查找节点时


	+ 查找时,时间复杂度均为O(n)
* 总体代码
* 单链表:



public class SingleLinkeDemo {
public static void main(String[] args) {
CourseLinke courseLinke = new CourseLinke();
CourseNode node1 = new CourseNode(1, “数据结构与算法”);
CourseNode node2 = new CourseNode(2, “数据结构与算法”);
CourseNode node3 = new CourseNode(3, “数据结构与算法”);
CourseNode node4 = new CourseNode(4, “数据结构与算法”);
CourseNode node5 = new CourseNode(5, “数据结构与算法”);
courseLinke.addCourse(node1);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值