class ListNode:
def __init__(self, data):
self.data = data
# store the reference (next item)
self.next = None
return
class SingleLinkedList:
def __init__(self):
self.head = None
self.tail = None
return
def add_list_item(self, item):
if not isinstance(item, ListNode):
item = ListNode(item)
if self.head is None:
self.head = item
else:
#想問的部分
self.tail.next = item
self.tail = item
return
def output_list(self):
current_node = self.head
results = []
while current_node is not None:
results.append(current_node.data)
# jump to the linked node
current_node = current_node.next
print(results)
return
list1 = SingleLinkedList()
list1.add_list_item(18)
list1.add_list_item('12')
list1.add_list_item('18')
list1.output_list()
想請教各位大大
add_list_item這個方法中
self.tail.next = item
有什麼用意
SingleLinkedList 這個類中並沒有next這個方法或變數
tail.next是什麼
list1 = SingleLinkedList()
# 初始化LinkedList
# 此時 self.head、self.tail是None
# self.head = None
# self.tail = None
list1.add_list_item(18)
# 此時加入18這個item
# 首先會先轉換成ListNode
# if not isinstance(item, ListNode):
# item = ListNode(item)
# 接下來進入你有問題的if部份
# if self.head is None:
# self.head = item
# 然後進入沒判別的部份,把tail設定成新增的元素
# self.tail = item
# 目前的list1長的像這樣
# [ListNode(18)],head和tail為ListNode(18)
# ListNode(18)目前data為18,next為None
list1.add_list_item('12')
# 此時加入"12"這個item
# 首先會先轉換成ListNode
# if not isinstance(item, ListNode):
# item = ListNode(item)
# 接下來進入你有問題的if部份,因為目前已經有head了,所以進入else部份
# self.tail.next = item
# 目前list1長這樣
# [ListNode(18)],head和tail為ListNode(18)
# ListNode(18)目前data為18,next為ListNode("12")
# 然後進入沒判別的部份,把tail設定成新增的元素
# self.tail = item
# 目前的list1長的像這樣
# [ListNode(18), ListNode("12")],head為ListNode(18),tail為ListNode("12")
# ListNode(18)目前data為18,next為ListNode("12"),ListNode("12")目前data為"12",next為None
list1.add_list_item('18')
# 剛上一個一樣
list1.output_list()
剛剛不在電腦前,現在這樣回好了,一步一步帶你看。
就是把新的Node接在前一個node的尾巴
假設原本linked list 長這樣:
Node1(head、tail) => Null