《剑指offer》——链表中环的入口结点
来源:互联网 发布:d3.js tree demo 编辑:程序博客网 时间:2024/06/05 23:45
T:
题目描述
一个链表中包含环,请找出该链表的环的入口结点。
基本做法
不考虑其中潜在的规律,就按照一般的方法,创建一个list,把扫描过的节点都存储在list中,知道下一个节点在list中已经存在,那就说明该节点就是入口节点。
这种方式下的时间复杂度为
我的code:
/* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } */ import java.util.ArrayList; import java.util.List; /** * T: 链表中环的入口结点 * * 题目描述 * 一个链表中包含环,请找出该链表的环的入口结点。 * * date: 2015.12.13 19:28 * @author SSS * */ public class Solution { /** * 将所有扫描过的节点都放在list列表中, * 看是否下一个节点已经在list列表中出现过 * @param pHead * @return */ public ListNode EntryNodeOfLoop(ListNode pHead){ ListNode targetNode = new ListNode(3); if (pHead == null || pHead.next == null) { return null; } List<ListNode> nodesList = new ArrayList<ListNode>(); nodesList.add(pHead); targetNode = pHead.next; while (!nodesList.contains(targetNode)) { nodesList.add(targetNode); targetNode = targetNode.next; } return targetNode; } }
规律求解
首先是设置两个指针
在相遇的时候,假设指针
同时,还会发现,这个
也就说,让一个指针指向环上的相遇点,一个指针指向头结点,同时以步长为1往后走,其碰头的那个结点,就是入口结点。
我的code:
/* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } */ /** * T: 链表中环的入口结点 * * 题目描述 * 一个链表中包含环,请找出该链表的环的入口结点。 * * date: 2015.12.13 19:39 * @author SSS * */ public class Solution { /** * 两个指针,一个指针步长为1,一个步长为2; * 先计算两个指针相交的位置点; * 然后让一个指针指向头结点,步长都为1,往后走,其相遇点就是入口点 * 该规律可通过公式推导得出 * @param pHead * @return */ public ListNode EntryNodeOfLoop(ListNode pHead){ ListNode targetNode = new ListNode(3); if (pHead == null || pHead.next == null) { return null; } ListNode preNode = pHead.next; ListNode postNode = pHead.next.next; // 找到相遇点 while (preNode != postNode) { preNode = preNode.next; postNode = postNode.next.next; } // 将其中一个指针指向头结点 postNode = pHead; // 步长都为1,同时往后走,直到两者相遇 // 相遇点就是入口 while (preNode != postNode) { preNode = preNode.next; postNode = postNode.next; } targetNode = preNode; return targetNode; } }
0 0
- 剑指offer—链表中环的入口结点
- 剑指offer—链表中环的入口结点
- 《剑指offer》——链表中环的入口结点
- 剑指offer(C++)——链表中环的入口结点
- 剑指offer——55.链表中环的入口结点
- 剑指offer--链表中环的入口结点
- 《剑指offer》链表中环的入口结点
- 剑指offer:链表中环的入口结点
- [剑指offer]链表中环的入口结点
- 剑指Offer--056-链表中环的入口结点
- 剑指Offer: 链表中环的入口结点
- 剑指offer-链表中环的入口结点
- 《剑指offer》-链表中环的入口结点
- 剑指Offer 56 链表中环的入口结点
- 剑指offer 链表中环的入口结点
- 剑指offer-55.链表中环的入口结点
- 【剑指offer】链表中环的入口结点
- 【剑指offer】链表中环的入口结点
- ListView实现单选(一)
- 自定义不等高cell的纯代码步骤(frame)
- 学习c语言的总结
- 回溯算法---重点
- strong和copy的区别
- 《剑指offer》——链表中环的入口结点
- 扶了我一把的人,这辈子不能忘!
- HDU 1074 Doing Homework DP 状态压缩
- poj-1581
- 解决office 2007中的document imaging软件的OCR识别出错问题
- 方法很重要
- 终于搞清楚Manifest 的解压问题了
- HDU 1548 A strange lift
- relatedTarget与fromElement、toElement元素