编程之美3.11扩展问题
来源:互联网 发布:手机号码数据购买 编辑:程序博客网 时间:2024/05/18 09:21
首先,对于文章中给出的bisearch()程序有一点疑问,对于strcmp()函数调用的字符指针都不判断是否为空。显然,这个保证留给了该函数的调用者,本身也没什么问题。但是,我觉得在实际代码中,起码应该使用assert()来测试一下为好。但是考虑到字符指针数组其实在运行时可能经常变化,其实风险还是有的。其实这样的东西严格来讲的确不能算错误,但是却是真真正正的风险。
好了,言归正传。
1)判断一个单链表是否有环。如果有,把指向环开始的指针返回;如果没有,返回NULL。
LinkedList* IsCyclicLinkedList (LinkedList* pHead)
{
LinkedList *pCur;
LinkedList *pStart;
while (pCur != NULL)
{
for (;;)
{
if (pStart == pCur -> pNext)
return pStart;
pStart = pStart->pNext;
}
pCur = pCur->pNext;
}
}
我觉得这个程序挺麻烦的。按照这个程序的思路,最终可能陷入到那个环中无法脱身,而且没有办法探测出已经陷入环中了。我改的程序如下:
LinkedList* IsCyclicLinkedList(LinkedList* pHead)
{
if (pHead == NULL)
return NULL;
LinkedList *pStart = pHead->pNext;
vector<LinkedList*> v;
v.push_back(pHead);
for (; pStart != NULL; ) {
for (int i=0; i<v.size(); i++) {
if (pStart == v[i])
return pStart;
}
pStart = pStart->pNext
}
return NULL;
}
这个应该不是作者的原意吧?不知道大家有没有什么思路可以提供给我。实在想不出好的方法。以前听说过快慢指针的方法检测环,但是好像用在这里也没有特别好的思路。
另外,扩展问题上的几个小问题:
给定一个有序(不降序)数组arr,求任意一个i使得arr[i]等于v,不存在则返回-1:
就用书上代码就可以了:
给定一个有序(不降序)数组arr,求最小的i使得arr[i]等于v,不存在则返回-1:
给定一个有序(不降序)数组arr,求最大的i使得arr[i]等于v,不存在则返回-1:
给定一个有序(不降序)数组arr,求最大的i使得arr[i]小于v,不存在则返回-1:
给定一个有序(不降序)数组arr,求最小的i使得arr[i]大于v,不存在则返回-1:
感觉写得不是特别好。以后有了什么新的领悟再来改进吧。
- 编程之美3.11扩展问题
- 《编程之美》3.11 扩展问题
- 编程之美----扩展问题
- 编程之美之扩展问题
- 编程之美3.10扩展问题
- 编程之美3.8扩展问题
- 编程之美4.1扩展问题
- 编程之美4.2扩展问题
- 编程之美3.4扩展问题
- 编程之美3.10扩展问题
- 《编程之美》3.4扩展问题实现
- 编程之美4.1 扩展问题2
- 编程之美1.9 扩展问题2
- 编程之美2.1扩展问题2
- 编程之美2.4扩展问题
- 编程之美---发帖“水王”扩展问题
- 0710编程之美二进制扩展问题
- 编程之美--2.3寻找发帖“水王”之扩展问题
- 大家好
- 教你如何查看linux版本
- StringTemplate.Net 学习笔记(6):自定义输出格式
- git学习笔记
- 求积分啊
- 编程之美3.11扩展问题
- 线程简单学习
- 控件命名规范
- java环境变量设置详解
- 查看端口占用
- 如何在Windows下编译或调试MySQL(转)
- 从多线程过程返回值
- 将默认壁纸设为动态壁纸
- 关于self.用法与内存管理