链表:逻辑上连续,物理上离散的存储结构;分类有单向链表,双向链表,循环链表等。
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 最好放在 == 的左边 ,对左值和右值的应用。
输出结果可使用栈,递归(可能会栈溢出)