推荐http://blog.csdn.net/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;
}
}