推荐http://blog.youkuaiyun.com/houhouzhe/article/details/6546566
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;
}
1、给定一个有序(不降序)数组arr,求任意一个i使得arr[i]等于v,不存在则返回-1:
int bisearch(char** arr, int b, int e, char* v)
{
int minIndex = b, maxIndex = e, midIndex;
while (minIndex < maxIndex - 1)
{
midIndex = minIndex + (maxIndex - minIndex) / 2;
if (strcmp(arr[midIndex], v) <= 0)
{
minIndex = midIndex;
}
else
{
maxIndex = midIndex;
}
}
if (!strcmp(arr[maxIndex], v))
{
return maxIndex;
}
else if (!strcmp(arr[minIndex], v))
{
return minIndex;
}
else
{
return -1;
}
}2、给定一个有序(不降序)数组arr,求最小的i使得arr[i]等于v,不存在则返回-1:
int bisearch(char** arr, int b, int e, char* v)
{
int minIndex = b, maxIndex = e, midIndex;
while (minIndex < maxIndex - 1)
{
midIndex = minIndex + (maxIndex - minIndex) / 2;
if (strcmp(arr[midIndex], v) < 0)
{
minIndex = midIndex;
}
else
{
maxIndex = midIndex;
}
}
if (!strcmp(arr[minIndex], v))
{
return minIndex;
}
else if (!strcmp(arr[maxIndex], v))
{
return maxIndex;
}
else
{
return -1;
}
}3、给定一个有序(不降序)数组arr,求最大的i使得arr[i]等于v,不存在则返回-1:
int bisearch(char** arr, int b, int e, char* v)
{
int minIndex = b, maxIndex = e, midIndex;
while (minIndex < maxIndex - 1)
{
midIndex = minIndex + (maxIndex - minIndex) / 2;
if (strcmp(arr[midIndex], v) <= 0)
{
minIndex = midIndex;
}
else
{
maxIndex = midIndex;
}
}
if (!strcmp(arr[maxIndex], v))
{
return maxIndex;
}
else if (!strcmp(arr[minIndex], v))
{
return minIndex;
}
else
{
return -1;
}
}4、给定一个有序(不降序)数组arr,求最大的i使得arr[i]小于v,不存在则返回-1:
int bisearch(char** arr, int b, int e, char* v)
{
int minIndex = b, maxIndex = e, midIndex;
while (minIndex < maxIndex - 1)
{
midIndex = minIndex + (maxIndex - minIndex) / 2;
if (strcmp(arr[midIndex], v) < 0)
{
minIndex = midIndex;
}
else
{
maxIndex = midIndex;
}
}
if (strcmp(arr[maxIndex], v) < 0)
{
return maxIndex;
}
else if (strcmp(arr[minIndex], v) < 0)
{
return minIndex;
}
else
{
return -1;
}
}5、给定一个有序(不降序)数组arr,求最小的i使得arr[i]大于v,不存在则返回-1:
int bisearch(char** arr, int b, int e, char* v)
{
int minIndex = b, maxIndex = e, midIndex;
while (minIndex < maxIndex - 1)
{
midIndex = minIndex + (maxIndex - minIndex) / 2;
if (strcmp(arr[midIndex], v) <= 0)
{
minIndex = midIndex;
}
else
{
maxIndex = midIndex;
}
}
if (strcmp(arr[minIndex], v) > 0)
{
return minIndex;
}
else if (strcmp(arr[maxIndex], v) > 0)
{
return maxIndex;
}
else
{
return -1;
}
}
本文介绍了一种检测单链表中是否存在环的方法,并提供了实现代码。此外,还详细探讨了如何利用二分搜索法在有序数组中查找特定元素的不同场景,包括查找任意、最小或最大匹配项及边界条件。
408

被折叠的 条评论
为什么被折叠?



