链表组成
Python 中链表由 head、 节点、tail、 三部分组成。
- 节点为Python 链表中最重要的部分,通过构建class Node()类,节点引入并存储value和next变量,其中value为Node中存储的链表内容,next为Node中存储的指针,指向下一个Node。即Node由指针域next和结构域value构成。
- 链表由上述Node连结而成,其中head指向链表的第一个节点,tail指向链表最后一个节点。
- tail指向的尾端Node的next指向(存储)None,即该Node的指针域存储 None的内存地址。
示例代码:
class Node():
def __init__(self, context=None, next=None):
self._context = context # 提高代码的健壮性 类似Java 的处理 需要定义函数获取参数数据
self._next = next
def getContext(self):
return self._context
def getNext(self):
return self._next
def setContext(self, newContext):
self._context = newContext
def setNext(self, newNext):
self._next = newNext
class LinkedList():
def __init__(self):
self._head = None
self._tail = None
self._length = 0
def isempty(self):
return self._head is None
def add(self, newadding):
newNode = Node()
newNode.setContext(newadding)
newNode.setNext(self._head)
self._head = newNode
if self._tail is None:
self._tail = newNode
self._length += 1
def append(self, newAppending):
newANode = Node()
newANode.setContext(newAppending)
if self._head is None:
self._tail = newANode
self._head = newANode
else:
self._tail.setNext(newANode)
self._tail = newANode
self._length += 1
def remove(self, context):
previous = None
current = self._head
while current is not None:
if current.getContext() == context:
if not previous:
self._head = current.getNext()
else:
previous.setNext(current.getNext())
break
else:
previous = current
current = current.getNext()
def search(self, context):
current = self._head
result = False
while current is not None and not result:
if current.getContext() == context:
result = True
else:
current = current.getNext()
return result
def items(self):
cur = self._head
while cur is not None:
yield cur.getContext()
cur = cur.getNext()
@property
def tail(self):
return self._tail
if __name__ == '__main__':
LL = LinkedList()
print(LL.isempty())
LL.add(1)
LL.add(2)
print(LL._tail.getContext())
print(LL)
for i in LL.items():
print(i)
print(LL.search(2))
LL.append(3)
for i in LL.items():
print(i)
LL.remove(1)
for i in LL.items():
print(i)
print(LL.search(1))
print(LL._tail.getContext())
上述示例运行结果如下:
True
1
<__main__.LinkedList object at 0x000002157A80BFD0>
2
1
True
2
1
3
2
3
False
3
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。