美文网首页
链表-链表中环的入口结点-java/c++

链表-链表中环的入口结点-java/c++

作者: Jacinth | 来源:发表于2017-07-13 00:51 被阅读0次

链表中环的入口结点

题目描述

一个链表中包含环,请找出该链表的环的入口结点。

思路一:

用map或者set,遍历链表,把每一个节点映射到map中或者添加到set中,当要添加的节点在map或者set中已经存在的时候,就是我们要的入口节点了。这种方法的缺点就是牺牲了空间。

struct ListNode {  
    int val;  
    struct ListNode *next;  
    ListNode(int x) :  
        val(x), next(NULL) {  
    }  
};  
  
class Solution {  
public:  
    ListNode* EntryNodeOfLoop(ListNode* pHead)  
    {  
        if(pHead == NULL || pHead->next == NULL)  
            return NULL;  
        while(pHead != NULL){  
            m[pHead]++;  
            if(m[pHead] == 2)  
                return pHead;  
            pHead = pHead->next;  
        }  
        return NULL;  
    }  
private:  
    map<ListNode*,int> m;  
};  

思路二:

快慢指针

/*解题思路:
时间复杂度为O(n)设置两个指针,开始都指向链表头,然后其中一个指针每次向前走一步,另一个指针每次向前走两步,如果快的遇到NULL了,证明该链表中没有环,如果有环,快的指针每次都要比慢的多走一步,最终两个指针会相遇。而相遇点p到入口点的距离=头指针到入口点的距离,因此,分别从相遇点、头指针开始走,相遇的那个位置就是环的入口结点。
*/
/*
 public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}
*/
public class Solution {

    public ListNode EntryNodeOfLoop(ListNode pHead)
    {
        if(pHead==null||pHead.next==null){
            return null;
        }
        ListNode p1=pHead;
        ListNode p2=pHead.next;
        while(p2!=null){
            p1.next=null;
            p1=p2;
            p2=p2.next;
        }
        return p1;
    }
}

相关文章

  • 剑指offer.C++.code56-60

    56. 链表中环的入口结点 一个链表中包含环,请找出该链表的环的入口结点。 57. 删除链表中重复的结点【基于递归...

  • 链表-链表中环的入口结点-java/c++

    链表中环的入口结点 题目描述 一个链表中包含环,请找出该链表的环的入口结点。 思路一: 用map或者set,遍历链...

  • 链表

    合并排序链表 链表排序 链表中环的入口结点 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出nul...

  • [剑指offer] 链表

    链表中环的入口结点 题目描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。 解题思路:...

  • JZ-055-链表中环的入口结点

    链表中环的入口结点 题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。题目链接:...

  • 【链表】链表中环的入口结点

  • 剑指 offer:55、链表中环的入口节点

    55. 链表中环的入口节点 题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。 ...

  • 链表中环的入口结点

    题目描述:给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。 思路:a、第一步,找环中相汇...

  • 链表中环的入口结点

    题目描述一个链表中包含环,请找出该链表的环的入口结点。

  • 链表中环的入口结点

    快慢指针f , s,两指针相遇时,f = 2* s, 设环长度为n,n = s再一个慢指针从链表头开始,两个慢指针...

网友评论

      本文标题:链表-链表中环的入口结点-java/c++

      本文链接:https://www.haomeiwen.com/subject/fgbihxtx.html