LintCode(103)带环链表 II
2016-05-31 21:08
337 查看
题目
给定一个链表,如果链表中存在环,则返回到链表中环的起始节点的值,如果没有环,返回null。您在真实的面试中是否遇到过这个题?
Yes
样例
给出 -21->10->4->5, tail connects to node index 1,返回10
分析
上一题的进阶。首先,利用快慢指针判断有无环,若遇到slow == fast时,跳出循环;
然后,调整fast=head,slow不变,此时slow与fast同步移动,直至再次相遇,即是链表中环的起始节点。
Python代码
""" Definition of ListNode class ListNode(object): def __init__(self, val, next=None): self.val = val self.next = next """ class Solution: """ @param head: The first node of the linked list. @return: The node where the cycle begins. if there is no cycle, return null """ def detectCycle(self, head): # write your code here if head == None or head.next == None: return None slow = head fast = head while fast != None and fast.next != None: slow = slow.next fast = fast.next.next if slow == fast: break if fast != None and fast == slow: fast = head while fast != slow: slow = slow.next fast = fast.next return fast return NoneGitHub -- Python代码
C++代码
/** 103 带环链表 II 给定一个链表,如果链表中存在环,则返回到链表中环的起始节点的值,如果没有环,返回null。 您在真实的面试中是否遇到过这个题? Yes 样例 给出 -21->10->4->5, tail connects to node index 1,返回10 */ /** * Definition of ListNode * class ListNode { * public: * int val; * ListNode *next; * ListNode(int val) { * this->val = val; * this->next = NULL; * } * } */ class Solution { public: /** * @param head: The first node of linked list. * @return: The node where the cycle begins. * if there is no cycle, return null */ ListNode *detectCycle(ListNode *head) { // write your code here if(head == NULL || head->next ==NULL) { return NULL; }//if ListNode *slow = head, *fast = head; while(fast && fast->next) { slow = slow->next; fast = fast->next->next; if(slow == fast) { break; }//if }//while if(fast && fast == slow) { fast = head; while(fast != slow) { fast = fast->next; slow = slow->next; }//while return fast; }//if return NULL; } };GitHub -- C++代码
相关文章推荐
- dp动态规划
- iOS应用内支付(IAP)的那些坑
- AJAX实例--留言板
- 设计模式笔记-State模式
- 第11周项目1- 点-圆-圆柱类族的设计
- Android MVP模式 浅谈
- poj1273【最大流入门】
- 根据提供的文件名文本,查找指定目录下的该文件,找到后复制到指定文件夹--bash
- ViewPager第一次显示全部
- Fitnesse的一个简单实例
- AJAX实例--瀑布流
- Android 中的Context 上下文
- HDU2602 01背包问题
- c++ assert() 使用方法
- LeetCode 78 Subsets
- Mac系统开发常见问题-80端口被占用的解决方案1-使用pfctl做网络层转发
- 杂记开篇
- poj3259 Wormholes(floyd||spfa判断负环)
- ThreadLocal简单理解
- spark1.6.1及scala2.11.8安装配置