010给定一个循环链表,实现一个算法返回这个环的开始结点 (keep it up)

给定一个循环链表,实现一个算法返回这个环的开始结点。

定义:

循环链表:链表中一个结点的指针指向先前已经出现的结点,导致链表中出现环。

例子:

输入:A -> B -> C -> D -> E -> C [结点C在之前已经出现过]

输出:结点C

可以用一个map<node*,bool> 就解决问题了。

下面是编程之美上一种奇特的解法:快慢指针解法。

代码:

struct SNode
{
	int    data;
	SNode* next;
};

SNode* findCirleStart(const SNode* vHead)
{
	if (vHead->next == NULL) return NULL;

	SNode* Fast = vHead;
	SNode* Slow = vHead;

	while (Slow && Fast->next)
	{
		Slow = Slow->next;
		Fast = Fast->next->next;
		if (Slow == Fast) break;
	}

	Slow = vHead;
	while (Slow != Fast)
	{
		Slow = Slow->next;
		Fast = Fast->next;
	}

	return Fast;
}
时间: 2025-01-01 08:01:07

010给定一个循环链表,实现一个算法返回这个环的开始结点 (keep it up)的相关文章

两数之和。给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true

题目来源:https://leetcode-cn.com/problems/two-sum-iv-input-is-a-bst/ 给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true. 测试用例中的树按层遍历为[5,3,6,2,4,null,7] 测试用例表示为(包含多个测试用例): [5,3,6,2,4,null,7] 9 [5,3,6,2,4,null,7] 28 [2,1,3] 4 [2,0,3,-4,1] -1 二叉搜索树的性质:

字典序,求给定字符串的下一个

POJ 1146 ID Codes 给定字符串有26个小写字母组成,求出给定字符串的下一个. 算法简述: 对于字符数组chararray,从字符串末尾向前找到第一个chararray[index]<chararray[index-1],然后找到index之后的字符中最后一个大于chararray[index-1],记为position,小于chararray[index]的字符.然后交换chararray[index-1]和chararray[position].对index及其以后的字符从小到

Python List pop()方法-用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值

描述 pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值. 语法 pop()方法语法: list.pop(obj=list[-1]) 参数 obj -- 可选参数,要移除列表元素的对象. 返回值 该方法返回从列表中移除的元素对象. 实例 以下实例展示了 pop()函数的使用方法: #!/usr/bin/python aList = [123, 'xyz', 'zara', 'abc']; print "A List : ", aList.pop(); pr

一个非常有用的算法---统计二进制数中1的个数

本人算法小菜,看见一个非常好的算法,统计一个数的二进制数的1的个数.觉得不错,与大家分享. 1 int fun(int x){ 2 int count = 0; 3 while(x){ 4 count++; 5 x = x &(x-1) 6 } 7 return count; 8 } 下面是个人的一点解释(欢迎拍砖) 比如一个数x的二进制后面几位是1000. x-1的二进制后面几位变成了     0111. 二者&,变成了                            0000.

大数据DDos检测——DDos攻击本质上是时间序列数据,t+1时刻的数据特点和t时刻强相关,因此用HMM或者CRF来做检测是必然! 和一个句子的分词算法CRF没有区别!

DDos攻击本质上是时间序列数据,t+1时刻的数据特点和t时刻强相关,因此用HMM或者CRF来做检测是必然!--和一个句子的分词算法CRF没有区别!注:传统DDos检测直接基于IP数据发送流量来识别,通过硬件防火墙搞定.大数据方案是针对慢速DDos攻击来搞定.难点:在进行攻击的时候,攻击数据包都是经过伪装的,在源IP 地址上也是进行伪造的,这样就很难对攻击进行地址的确定,在查找方面也是很难的.这样就导致了分布式拒绝服务攻击在检验方法上是很难做到的.领域知识见:http://blog.csdn.n

给定一个正整数,实现一个方法求出离该整数最近的大于自身的 换位数 &lt;把一个整数各个数位进行全排列&gt;

"""给定一个正整数,实现一个方法求出离该整数最近的大于自身的 换位数 -> 把一个整数各个数位进行全排列""" # 使用 permutations() 方法实现import itertools def full_arrangement(num): my_str = '' my_list = [] permutation = list(itertools.permutations(str(num), len(str(num)))) for

一个类似 Twitter 雪花算法 的 连续序号 ID 产生器 SeqIDGenerator

项目地址 :     https://github.com/kelin-xycs/SeqIDGenerator 今天 QQ 群 里有网友问起产生唯一 ID 的方法 有哪些,  讨论了各种方法 . 有网友提到 Twitter 的 雪花算法 :       https://blog.csdn.net/w200221626/article/details/52064976 我觉得 GUID 的 优点 是 简单 高效, 缺点 是 可读性 比较差 . 高效 是指 相比起 要到 数据库 读取 种子(当前最大

ZeroMQ接口函数之 :zmq_connect - 由一个socket创建一个对外连接

ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq_connect zmq_connect(3)  ØMQ Manual - ØMQ/3.2.5 Name zmq_connect - 由一个socket创建一个对外连接(outgoing connection) Synopsis int zmq_connect (void *socket, const char *endpoint); Description zmq_connect()函数将socket连接到节点

c语言:写一个函数建立一个有3名学生数据的单向动态链表

写一个函数建立一个有3名学生数据的单向动态链表. 解:程序: #include<stdio.h> #include<stdlib.h> #define LEN sizeof(struct Student) struct Student { long num; float score; struct Student *next; }; int n; struct Student *creat(void)//定义函数返回一个指向链表头的指针 { struct Student *head