3.判断单链表中是否存在环。
思路:
1.这道题的关键是解决怎么不借用额外的空间来交换两个变量,这里面的技巧是采用异或的方式,相同的变量异或结果为1,任何变量同1异或结果不变。
void change(char *first,char *second){ *first = *first ^ *second; *second = *first ^ *second; *first = *first ^ *second;}void reversed(char *index,char size){ if(size <= 1){ return ; } for(int i = 0 ; i < size / 2 ; ++i){ change(index+i,index+size-1-i); }}2. 删除串中指定的字符,这样的题目应该就是顺序扫描字符串,直到找到要删除的字符,然后接下来依次复制后面的一个元素覆盖当前元素就可以了。到最后一个元素的时侯释放,或者怎么操作无所谓了。
void delIndex(char *index,int size,char pattern){ if(size <= 0){ cout << "index is empty!" << endl; return ; } int pIndex = 0; while(index[pIndex] != pattern){ ++pIndex; if(pIndex == size){ cout << "can't match the pattern!" << endl; return ; } } while(pIndex < size-1){ index[pIndex] = index[pIndex+1]; ++pIndex; } index[pIndex] = '\0';}3.老题了。。两个指针,一个一次走一个节点,另一个一次走两个节点。如果什么时候两个指针指向同一个节点就说明链表有环,如果遇到某个指针为空,则说明链表没有环。
bool hasLoop(slist * head){ slist * slow = head , * fast = head; while( fast && fast -> next ){ slow = slow -> next; fast = fast -> next -> next; if ( slow == fast ) break ; } return ! (fast == NULL || fast -> next == NULL);}