Swift-环路开头结点

题目:通过有环链表,返回环路链表的开头结点.

核心代码:
<pre><code>` func findBeginingNode(headNode:ListNode) -> ListNode? {

    var slow:ListNode? = headNode
    var fast:ListNode? = headNode
    
    // 环路节点相交
    while fast != nil {
        slow = slow?.next
        fast = fast?.next?.next
        if slow?.value == fast?.value {
            break
        }
    }
    
    // 校验
    if fast == nil || fast?.next == nil {
        return nil
    }
    
    // 重置开始节点
    slow = headNode
    while slow?.value != fast?.value {
        slow = slow?.next
        fast = fast?.next
    }
    
    return fast
}`</code></pre>

测试代码:
<pre><code>var circleHead:ListNode = ListNode(value: "1") var circelNode1:ListNode = ListNode(value: "2") var circelNode2:ListNode = ListNode(value: "3") var circelNode3:ListNode = ListNode(value: "4") circleHead.next = circelNode1 circelNode1.next = circelNode2 circelNode2.next = circelNode3 circelNode3.next = circleHead var beginingNode:ListNode? = listNodeManger.findBeginingNode(headNode: circelNode1) print("FlyElephant---环路链表开始值---\(beginingNode!.value!)")</code></pre>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转载请注明出处:http://www.jianshu.com/p/c65d9d753c31 在上一篇博客《数据结构...
    Alent阅读 3,541评论 4 74
  • 大学的时候不好好学习,老师在讲台上讲课,自己在以为老师看不到的座位看小说,现在用到了老师讲的知识,只能自己看书查资...
    和珏猫阅读 1,483评论 1 3
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,548评论 25 708
  • 从我俩确定关系之后,我和她在一起整整四年了。 四年时间说长不长,说短也不短。我只是希望我们能像现在这样开心快...
    ZiaCai阅读 97评论 0 0
  • 前篇 010 D年 021 D-4600年 022 D-64年 023 D-52年 024 D-46年 0434...
    大田阿喵汪阅读 299评论 0 0