- 论坛徽章:
- 0
|
写了段python代码
验证了刚才的算法
没有复制任何数据
只是指针指来指去
- #!/usr/bin/env python
- nd7 = [1, None, 'nd7']
- nd6 = [1, nd7, 'nd6']
- nd5 = [1, nd6, 'nd5']
- nd4 = [1, nd5, 'nd4']
- nd3 = [1, nd4, 'nd3']
- nd2 = [1, nd3, 'nd2']
- head = nd1 = [1, nd2, 'nd1']
- nd7[1] = nd3 #recycle
- def get_next(node):
- if node != None:
- return node[1]
- else:
- return None
- def has_cycle(head):
- p1 = head
- p2 = head
- while (p1 != None) and (p2 != None):
- p1 = get_next(p1)
- p2 = get_next(p2)
- p2 = get_next(p2)
- if p1 == None or p2 == None:
- return [0, None]
- if id(p1) == id(p2):
- return [1, p1]
- return [0, None]
- def node_in_cycle(node, cycle_nd):
- bak = cycle_nd
- while True:
- if id(node) == id(cycle_nd):
- return True
- cycle_nd = get_next(cycle_nd)
- if id(bak) == id(cycle_nd):
- return False
- def look_for_cycle_point(head, cycle_nd):
- while head != None:
- if node_in_cycle(head, cycle_nd):
- return head
- else:
- head = get_next(head)
- return None
- if __name__ == '__main__':
- print 'Go...'
- ret = has_cycle(head)
- if ret[0]:
- node = look_for_cycle_point(head,ret[1])
- print node[2]
- else:
- print 'No cycle'
复制代码 |
|