zoukankan      html  css  js  c++  java
  • 第九十题(1.不开辟暂时空间交换 2.删除串中指定字符 3.推断链表中存在环)

    1.不开辟用于交换数据的暂时空间,怎样完毕字符串的逆序

    2.删除串中指定的字符

    3.推断单链表中是否存在环

    分析和代码:

    1,不开辟用于交换的暂时空间,能够用异或交换。或者用字符串的''位置的空间(打个擦边球,使用已有空间。不算开辟大笑)。

    	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] = '';
    	}
    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] != '')
    			if (str[i] == c)
    				i++;
    			else
    				str[j++] = str[i++];
    		str[j] = '';
    	}
    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;
    	}



  • 相关阅读:
    remove white space from read
    optimize the access speed of django website
    dowload image from requests
    run jupyter from command
    crawl wechat page
    python version 2.7 required which was not found in the registry windows 7
    health
    alternate rows shading using conditional formatting
    word
    【JAVA基础】static 关键字
  • 原文地址:https://www.cnblogs.com/slgkaifa/p/6815895.html
Copyright © 2011-2022 走看看