【学习笔记】数据结构与算法基础学习:链表

链表:逻辑上连续,物理上离散的存储结构;分类有单向链表,双向链表,循环链表等。

1.加上控制头会比较好操作。

2.应检查malloc()返回值。

3.使用free()后应把指针置空(= NULL)。


问题:

1.判断链表是否有环,以及找交点

(1) 设置两个指针,一个比另一个移动快,有环的话两者会相遇。

(2) 找交点:链表A遍历,ptrA每移动一步与链表B的指针ptrB进行比较,若相等则有交点;ptrA遍历一遍,ptrB移动一步。


2.判断两链表是否有交点

(1) 求差值,找到等长处。进行遍历比较 ( (4) 的优化版)。O(n+m)

(2) 将链表的尾指向其中一个链表的头,用链表是否有环解决问题  O(m+2n)+O( )

(3) 将其中一条链表逆序,遍历逆序链表并求长度len,把两个链表的长度(a,b)相加减去得到的长度除2就是结点位置到链表尾的距离( (a+b) - len ) / 2  

(4) 用穷举一个一个进行比较

(找链表的交点:看尾部是否为空)


3.无限大数乘法

注意 == 的使用 ,NULL 最好放在 == 的左边 ,对左值和右值的应用。

输出结果可使用栈,递归(可能会栈溢出)



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值