-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
2def910
commit ce1f378
Showing
3 changed files
with
270 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,92 @@ | ||
/* | ||
* @lc app=leetcode.cn id=142 lang=cpp | ||
* | ||
* [142] 环形链表 II | ||
* | ||
* https://leetcode-cn.com/problems/linked-list-cycle-ii/description/ | ||
* | ||
* algorithms | ||
* Medium (49.55%) | ||
* Likes: 421 | ||
* Dislikes: 0 | ||
* Total Accepted: 64.2K | ||
* Total Submissions: 129.6K | ||
* Testcase Example: '[3,2,0,-4]\n1' | ||
* | ||
* 给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 | ||
* | ||
* 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。 | ||
* | ||
* 说明:不允许修改给定的链表。 | ||
* | ||
* | ||
* | ||
* 示例 1: | ||
* | ||
* 输入:head = [3,2,0,-4], pos = 1 | ||
* 输出:tail connects to node index 1 | ||
* 解释:链表中有一个环,其尾部连接到第二个节点。 | ||
* | ||
* | ||
* | ||
* | ||
* 示例 2: | ||
* | ||
* 输入:head = [1,2], pos = 0 | ||
* 输出:tail connects to node index 0 | ||
* 解释:链表中有一个环,其尾部连接到第一个节点。 | ||
* | ||
* | ||
* | ||
* | ||
* 示例 3: | ||
* | ||
* 输入:head = [1], pos = -1 | ||
* 输出:no cycle | ||
* 解释:链表中没有环。 | ||
* | ||
* | ||
* | ||
* | ||
* | ||
* | ||
* 进阶: | ||
* 你是否可以不用额外空间解决此题? | ||
* | ||
*/ | ||
|
||
// @lc code=start | ||
/** | ||
* Definition for singly-linked list. | ||
* struct ListNode { | ||
* int val; | ||
* ListNode *next; | ||
* ListNode(int x) : val(x), next(NULL) {} | ||
* }; | ||
*/ | ||
class Solution { | ||
public: | ||
ListNode *detectCycle(ListNode *head) { | ||
ListNode* slowNode = head; | ||
ListNode* fastNode = head; | ||
|
||
while(true){ | ||
if (fastNode == NULL || fastNode->next == NULL) { | ||
return NULL; | ||
} | ||
fastNode = fastNode->next->next; | ||
slowNode = slowNode->next; | ||
if(slowNode == fastNode){ | ||
break; | ||
} | ||
} | ||
fastNode = head; | ||
while(fastNode != slowNode){ | ||
fastNode = fastNode->next; | ||
slowNode = slowNode->next; | ||
} | ||
return fastNode; | ||
} | ||
}; | ||
// @lc code=end | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,93 @@ | ||
/* | ||
* @lc app=leetcode.cn id=142 lang=java | ||
* | ||
* [142] 环形链表 II | ||
* | ||
* https://leetcode-cn.com/problems/linked-list-cycle-ii/description/ | ||
* | ||
* algorithms | ||
* Medium (49.55%) | ||
* Likes: 421 | ||
* Dislikes: 0 | ||
* Total Accepted: 64.2K | ||
* Total Submissions: 129.6K | ||
* Testcase Example: '[3,2,0,-4]\n1' | ||
* | ||
* 给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 | ||
* | ||
* 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。 | ||
* | ||
* 说明:不允许修改给定的链表。 | ||
* | ||
* | ||
* | ||
* 示例 1: | ||
* | ||
* 输入:head = [3,2,0,-4], pos = 1 | ||
* 输出:tail connects to node index 1 | ||
* 解释:链表中有一个环,其尾部连接到第二个节点。 | ||
* | ||
* | ||
* | ||
* | ||
* 示例 2: | ||
* | ||
* 输入:head = [1,2], pos = 0 | ||
* 输出:tail connects to node index 0 | ||
* 解释:链表中有一个环,其尾部连接到第一个节点。 | ||
* | ||
* | ||
* | ||
* | ||
* 示例 3: | ||
* | ||
* 输入:head = [1], pos = -1 | ||
* 输出:no cycle | ||
* 解释:链表中没有环。 | ||
* | ||
* | ||
* | ||
* | ||
* | ||
* | ||
* 进阶: | ||
* 你是否可以不用额外空间解决此题? | ||
* | ||
*/ | ||
|
||
// @lc code=start | ||
/** | ||
* Definition for singly-linked list. | ||
* class ListNode { | ||
* int val; | ||
* ListNode next; | ||
* ListNode(int x) { | ||
* val = x; | ||
* next = null; | ||
* } | ||
* } | ||
*/ | ||
public class Solution { | ||
public ListNode detectCycle(ListNode head) { | ||
ListNode fastNode = head, slowNode = head; | ||
|
||
while(true) { | ||
if(fastNode == null || fastNode.next == null){ | ||
return null; | ||
} | ||
fastNode = fastNode.next.next; | ||
slowNode = slowNode.next; | ||
if(fastNode == slowNode){ | ||
break; | ||
} | ||
} | ||
fastNode = head; | ||
while (fastNode != slowNode) { | ||
fastNode = fastNode.next; | ||
slowNode = slowNode.next; | ||
} | ||
return fastNode; | ||
} | ||
} | ||
// @lc code=end | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,85 @@ | ||
# | ||
# @lc app=leetcode.cn id=142 lang=python3 | ||
# | ||
# [142] 环形链表 II | ||
# | ||
# https://leetcode-cn.com/problems/linked-list-cycle-ii/description/ | ||
# | ||
# algorithms | ||
# Medium (49.55%) | ||
# Likes: 421 | ||
# Dislikes: 0 | ||
# Total Accepted: 64.2K | ||
# Total Submissions: 129.6K | ||
# Testcase Example: '[3,2,0,-4]\n1' | ||
# | ||
# 给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 | ||
# | ||
# 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。 | ||
# | ||
# 说明:不允许修改给定的链表。 | ||
# | ||
# | ||
# | ||
# 示例 1: | ||
# | ||
# 输入:head = [3,2,0,-4], pos = 1 | ||
# 输出:tail connects to node index 1 | ||
# 解释:链表中有一个环,其尾部连接到第二个节点。 | ||
# | ||
# | ||
# | ||
# | ||
# 示例 2: | ||
# | ||
# 输入:head = [1,2], pos = 0 | ||
# 输出:tail connects to node index 0 | ||
# 解释:链表中有一个环,其尾部连接到第一个节点。 | ||
# | ||
# | ||
# | ||
# | ||
# 示例 3: | ||
# | ||
# 输入:head = [1], pos = -1 | ||
# 输出:no cycle | ||
# 解释:链表中没有环。 | ||
# | ||
# | ||
# | ||
# | ||
# | ||
# | ||
# 进阶: | ||
# 你是否可以不用额外空间解决此题? | ||
# | ||
# | ||
|
||
# @lc code=start | ||
# Definition for singly-linked list. | ||
# class ListNode: | ||
# def __init__(self, x): | ||
# self.val = x | ||
# self.next = None | ||
|
||
class Solution: | ||
def detectCycle(self, head: ListNode) -> ListNode: | ||
slowNode = head | ||
fastNode = head | ||
|
||
while True: | ||
if (fastNode is None or fastNode.next is None): | ||
return None | ||
fastNode = fastNode.next.next | ||
slowNode = slowNode.next | ||
if fastNode == slowNode: | ||
break | ||
fastNode = head | ||
while fastNode != slowNode : | ||
fastNode = fastNode.next | ||
slowNode = slowNode.next | ||
return fastNode | ||
|
||
|
||
# @lc code=end | ||
|