python判斷連結串列是否有環的例項程式碼
阿新 • • 發佈:2020-02-03
先看下例項程式碼:
class Node: def __init__(self,value=None): self.value = value self.next = None class LinkList: def __init__(self,head = None): self.head = head def get_head_node(self): """ 獲取頭部節點 """ return self.head def append(self,value) : """ 從尾部新增元素 """ node = Node(value = value) cursor = self.head if self.head is None: self.head = node else: while cursor.next is not None: cursor = cursor.next cursor.next = node if value==4: node.next = self.head def traverse_list(self): head = self.get_head_node() cursor = head while cursor is not None: print(cursor.value) cursor = cursor.next print("traverse_over") def hasCycle(self,head): """ :type head: ListNode :rtype: bool """ slow=fast=head while slow and fast and fast.next: slow = slow.next fast = fast.next.next if slow is fast: return True return False def main(): l = LinkList() l.append(1) l.append(2) l.append(3) l.append(4) head = l.get_head_node() print(l.hasCycle(head)) #l.traverse_list() if __name__ == "__main__": main()
知識點思考:
判斷一個單鏈表是否有環,
可以用 set 存放每一個 節點,這樣每次 訪問後把節點丟到這個集合裡面.
其實 可以遍歷這個單鏈表,訪問過後,
如果這個節點 不在 set 裡面,把這個節點放入到 set 集合裡面.
如果這個節點在 set 裡面,說明曾經訪問過,所以這個連結串列有重新 走到了這個節點,因此一定有環
如果連結串列都走完了,把所有的節點都放完了. 還是沒有重複的節點,那說明沒有環.
以上就是本次介紹的全部相關知識點內容,感謝大家的學習和對我們的支援。