LeetCode -- Linked List Cycle II
2015-11-21 10:13
381 查看
题目描述:
Given a linked list, return the node where the cycle begins. If there is no cycle, return null.
Note: Do not modify the linked list.
Follow up:
Can you solve it without using extra space?
判断链表是否有环,如果存在,返回环起始节点;如果不存在,返回Null。
思路:
1. 使用快慢指针的方法找到环的位置。
2. 如果找到了环,慢指针回到起点,快慢指针每次各走一步,下一次相遇的位置就是环的起点。
实现代码:
Given a linked list, return the node where the cycle begins. If there is no cycle, return null.
Note: Do not modify the linked list.
Follow up:
Can you solve it without using extra space?
判断链表是否有环,如果存在,返回环起始节点;如果不存在,返回Null。
思路:
1. 使用快慢指针的方法找到环的位置。
2. 如果找到了环,慢指针回到起点,快慢指针每次各走一步,下一次相遇的位置就是环的起点。
实现代码:
/** * Definition for singly-linked list. * public class ListNode { * public int val; * public ListNode next; * public ListNode(int x) { * val = x; * next = null; * } * } */ public class Solution { public ListNode DetectCycle(ListNode head) { if(head == null){ return null; } var p = head; var q = head; var found = false; while(p != null && q != null && q.next != null && !found){ var t = q; p = p.next; q = q.next.next; if(ReferenceEquals(p,q)){ found = true; } } if(!found){ return null; } // p start from head again // and q standing where it is // next time they meet point is where cycle starts from p = head; while(!ReferenceEquals(p, q)){ p = p.next; q = q.next; } return q; } }
相关文章推荐
- JAVA去掉一个字符串的前后空格
- 大数加法模板
- JAVA将一个字符串反向颠倒
- 坚持总结
- 单片机 MSP430 IIC控制器编程(2)
- LeetCode -- Contains Duplicate II
- js几秒以后倒计时跳转示例
- Material Design(1)底部表单(Bottom sheets)
- jdbc连接oracle教程
- 1040 Longest Symmetric String
- Android setOnItemLongClickListener setOnItemClickListener 同时触发解决
- PHP中的逻辑判断函数empty() isset() is_null() ==NULL ===NULL
- 最小生成树——Kruskal(克鲁斯卡尔)算法
- LeetCode Unique Paths II
- LeetCode -- Bitwise AND of Numbers Range
- android笔记 看过stormzhang大大的博客(关于像素,屏幕密度)
- 1050 String Subtraction
- Linux---mkdir
- CentOS6.x/RedHat6.x/Oracle Linux6.x安装完全攻略
- 大数乘法模板