第九十题(1.不开辟临时空间交换 2.删除串中指定字符 3.判断链表中存在环)
2014-07-05 14:38
295 查看
1.不开辟用于交换数据的临时空间,如何完成字符串的逆序
2.删除串中指定的字符
3.判断单链表中是否存在环
分析和代码:
1,不开辟用于交换的临时空间,可以用异或交换,或者用字符串的'\0'位置的空间(打个擦边球,使用已有空间,不算开辟
)。
2.删除串中指定的字符
3.判断单链表中是否存在环
分析和代码:
1,不开辟用于交换的临时空间,可以用异或交换,或者用字符串的'\0'位置的空间(打个擦边球,使用已有空间,不算开辟
)。
void switch1(char* str) //使用异或交换 { int len = strlen(str); for (int i = 0; i < len / 2; i++) str[i] ^= str[len - i - 1] ^= str[i] ^= str[len - i - 1]; } void switch2(char* str) //借用字符串结束符的位置 { int len = strlen(str); for (int i = 0; i < len / 2; i++) { str[len] = str[i]; str[i] = str[len - i - 1]; str[len - i - 1] = str[len]; } str[len] = '\0'; }2.遍历一遍完成字符(可能会有多个相同的字符)删除,切忌每删除一个字符就将其后的字符都前移一遍,这样很耗时,应该设置两个下标,i、j,如果不删除字符[i]的话,把str[i]赋给str[j],如果要删除,直接使i加1跳过要删除字符,不对str[j]进行赋值,这样一次遍历即可完成。
void deleteChar(char* str,char c) { int i = 0, j = 0; while (str[i] != '\0') if (str[i] == c) i++; else str[j++] = str[i++]; str[j] = '\0'; }3.设置两个指针,slow和fast,slow每次前进一个节点,fast每次前进两个节点,两个指针从头结点同时出发,若链表中存在环,fast必然会追上slow指针,在两指针相同时返回true即可,若指针到达链表结尾,必然无环,返回false
bool hasLoop(node* head) { node *slow=head, *fast=head; while (fast!=NULL&&fast->next != NULL) { fast = fast->next->next; slow = slow->next; if (fast == slow) return true; } return false; }
相关文章推荐
- 第九十题(1.不开辟暂时空间交换 2.删除串中指定字符 3.推断链表中存在环)
- 90. 1.不开辟用于交换数据的临时空间 2.字符串的逆序 3判断单链表中是否存在环
- 判断临时表是否存在(临时表的删除)
- 面试:不开辟用于交换数据的临时空间,如何完成字符串的逆序
- 判断临时表是否存在(临时表的删除)
- SQL SERVER 删除前先判断指定的表或者存储过程是否存在
- [完]PHP Array 创建、索引、添加、删除、判断是否存在指定元素
- 不开辟用于交换数据的临时空间,如何完成字符串的逆序
- 不开辟用于交换数据的临时空间,如何完成字符串的逆序
- 不开辟用于交换数据的临时空间,如何完成字符串的逆序(在技术一轮面试中,有些面试官会这样问)
- 删除前先判断指定的表或者存储过程是否存在if exists
- 不开辟用于交换数据的临时空间,如何完成字符串的逆序
- 不开辟用于交换数据的临时空间,如何完成字符串的逆序
- 不开辟用于交换数据的临时空间,如何完成字符串的逆序
- 不开辟用于交换数据的临时空间,如何完成字符串的逆序
- 链表的基本操作(创建,查找指定位置元素,删除指定元素,插入,倒置,去重,求集合的差,分别交换结点与交换结点值实现的冒泡排序,将两个有序链表合并成一个有序链表)c语言实现
- 判断临时表是否存在(临时表的删除)
- 导出文件成sql形式,创建表格之前,判断某表格是否存在,创建临时存储过程删除表格,之后再删除存储过程
- 不开辟用于交换数据的临时空间完成字符串的逆序
- sql server中列中字符换使用分割字符后,判断是否存在指定的项