LeetCode 141 — Linked List Cycle(C++ Java Python)

来源:互联网 发布:discuz数据备份 编辑:程序博客网 时间:2024/06/05 02:33

题目:http://oj.leetcode.com/problems/linked-list-cycle/

Given a linked list, determine if it has a cycle in it.

Follow up:
Can you solve it without using extra space?

题目翻译:

给定一个链表,确定它是否有环。
进阶:
你可以不使用额外的空间解决它吗? 

分析:

        使用快慢指针。如果链表有环,则两指针必在某一时刻相等。

C++实现:

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:    bool hasCycle(ListNode *head) {    if(head == NULL)    {    return false;    }    ListNode *fast = head;    ListNode *slow = head;    while(fast->next != NULL)    {    fast = fast->next->next;    if(fast == NULL)    {    return false;    }    slow = slow->next;    if(fast == slow)    {    return true;    }    }    return false;    }};

Java实现:

/** * Definition for singly-linked list. * class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { *         val = x; *         next = null; *     } * } */public class Solution {    public boolean hasCycle(ListNode head) {if (head == null) {return false;}ListNode fast = head;ListNode slow = head;while (fast.next != null) {fast = fast.next.next;if (fast == null) {return false;}slow = slow.next;if (fast == slow) {return true;}}return false;    }}

Python实现:

# Definition for singly-linked list.# class ListNode:#     def __init__(self, x):#         self.val = x#         self.next = Noneclass Solution:    # @param head, a ListNode    # @return a boolean    def hasCycle(self, head):        if head == None:            return False                fast = head        slow = head                while fast.next != None:            fast = fast.next.next                        if fast == None:                return False                        slow = slow.next                        if fast == slow:                return True                return False

        感谢阅读,欢迎评论!

0 0
原创粉丝点击