有没有办法在Python中检测循环列表的第一个元素?在Java和C ++中,您只需建立指向第一个元素的指针。
我遇到的问题:给定一个循环链表,实现一个在循环开始时返回节点的算法。
答案 0 :(得分:0)
我认为你需要深度优先搜索来回答这个问题的一般性,这就是这样的事情:
a = [1,2,3]
b = [4,5,6]
a[1] = b
b[2] = a
def is_list(l):
try:
it = iter(l)
return l
except TypeError:
return None
def dfs(a, colors):
l = is_list(a)
print 'is_list:', l
if l:
if colors.has_key(id(l)):
print 'cycle detected'
return l
colors[id(l)] = ''
for ll in l:
dfs(ll, colors)
colors = {}
dfs(a, colors)
答案 1 :(得分:0)
循环链表没有真正的开头&结束。但是从您的评论中,我认为您希望在循环浏览列表时检测到何时到达您开始使用的元素。
#The structure of ListNode
class ListNode:
def __init__(self, val):
self.val = val
self.next = None
# Supposes you have a circular linked list and you have a reference to head. You can do as follows to print the whole list.
current = head.next
while current != head: # stop when it comes back to head
print current.val
current = current.next