python-3.x - 按字母顺序将名称添加到列表中?
问题描述
假设我有一个名称的链接列表。每个节点按字母顺序排列。如何正确循环并将名称插入正确的位置?我们假设它不区分大小写。
def add(self, name):
if self._size == 0:
self.add_first(name)
self._size += 1
elif self._size >= 1:
cur = self._head
while name.upper() > cur.upper() or cur.get_next is not None:
这就是我卡住的地方
一个节点编码如下
class Node():
def __init__(self, element, next_node=None):
self._element = element
self._next = next_node
def set_next(self, next_node):
self._next = next_node
def set_element(self, element):
self._element = element
def get_next(self):
return self._next
def get_element(self):
return self._element
解决方案
下面是一个通用的迭代实现。您必须使其适应您的链表类。
class Node:
def __init__(self, val, _next):
self.val = val
self.next = _next
def add(self, name):
up = name.upper()
if up < self.val.upper():
return Node(name, self)
# We could also change self.val to update the head
# without worrying about returning values:
# self.val, self.next = name, Node(self.val, self.next)
curr = self
while True:
if not curr.next:
curr.next = Node(name, None)
break
else:
if curr.val.upper() < up < curr.next.val.upper():
curr.next = Node(name, curr.next)
break
else:
curr = curr.next
return self
def __repr__(self):
return "Node({0.val}, {0.next!r})".format(self)
head = Node("Adam", None)
head = head.add("Aardvark")
head = head.add("Bob")
print(head)
# Node(Aardvark, Node(Adam, Node(Bob, None)))
推荐阅读
- python - Cursor.execute 在 Python 中不起作用
- sql - 根据条件将 Rowdata 转换为多行
- android - 在选项卡式活动中启动服务
- python - 使用 model.predict() 使用 keras 输出概率分数
- html - HTML / CSS:如何在调整窗口大小时使图像周围的文本适合?
- python - 如何在python中将向量cbind到数据框并将向量名称保留为新列的名称?
- html - CSS 变量在使用 Sass 的媒体查询中不起作用
- css - 在 Webpack 中加载 CSS
- algorithm - 识别 Haskell 元组中的重复项
- laravel - Auth::guest() 不工作