链表蟒蛇


class Node:
def __init__(self, data):
self.data = data
self.next = None
class LinkedList:
def __init__(self):
self.head = None
def __len__(self):
cur = self.head
count = 0
while cur is not None:
count += 1
cur = cur.next
return count
def append(self, item):
cur = self.head
while cur is not None:
cur = cur.next
cur.next = ?

我正在尝试附加到链接列表,但我不能使用"cur.next",因为 cur 没有属性"next"。对此有什么提示吗?

谢谢!

我的测试用例:

def test_append_empty() -> None:
lst = LinkedList()
lst.append(1)
assert lst.head.data == 1

def test_append_one() -> None:
lst = LinkedList()
lst.head = Node(1)
lst.append(2)
assert lst.head.next.data == 2

我希望通过mad_的清晰示例,您已经理解了您仍然需要处理节点概念的想法。

链表不仅是值的列表,也是链接的列表。

由于您似乎有兴趣在一个类中执行此操作,因此这里有一个快速实现:

class LinkedList:
def __init__(self, item=None):
self.next = None
self.val = item
def __len__(self):
cur = self
count = 1 if self.val is not None else 0
while cur.next is not None:
count += 1
cur = cur.next
return count    
def append(self, item):
if not self.val:
self.val = item
return
cur = self
while cur.next is not None:
cur = cur.next
cur.next = LinkedList(item)

编辑:

由于您已经在问题中包含mad_的len(( 成员,因此我还添加了适合此类的成员。

以下是一些使用示例:

myList = LinkedList()
myList.append('a')
myList.append('b')
myList.append('c')
myList.append('d')
print(len(myList))

您必须查找self.headNone的情况,因为 Nonetype 接下来将没有属性。同时迭代,直到找到节点中的下一个指针为 None。因此,它应该是cur.next is not None的,而不是cur is None查找节点是否为"无"。从逻辑上讲,您不能将任何内容附加到None

class Node:
def __init__(self, data):
self.data = data
self.next = None
class LinkedList:
def __init__(self):
self.head = None
def __len__(self):
if not self.head:
return 0
cur = self.head
count = 0
while cur is not None:
count += 1
cur = cur.next
return count
def append(self, item):
if not self.head:
self.head=Node(item)
return
cur = self.head
while cur.next is not None:
cur = cur.next
cur.next = Node(item)

测试用例1

l=LinkedList()
l.append(1)
l.__len__() #prints 1

测试用例2

l=LinkedList()
l.append(2)
l.append(3)
l.__len__() #2
temp=l.head
while(temp):
print(temp.data)
temp=temp.next

还包括OP的测试用例

def test_append_empty():
lst = LinkedList()
lst.append(1)
print(lst.head.data == 1)

def test_append_one():
lst = LinkedList()
lst.head = Node(1)
lst.append(2)
print(lst.head.next.data == 2)
test_append_empty() #True
test_append_one() #True

相关内容

  • 没有找到相关文章

最新更新