假设列表没有前哨头节点,而是使用变量头来引用列表的第一个节点
时间: 2023-05-27 12:07:21 浏览: 65
如果列表没有前哨头节点,那么我们需要使用一个变量来引用列表的第一个节点。这个变量通常被称为头节点(head node)。
在这种情况下,我们需要对访问和操作列表的方法进行一些修改。例如,在遍历列表时,我们不能像之前那样从头节点的下一个节点开始,而是直接从头节点开始。另外,在插入和删除节点时,我们也需要特别处理头节点的情况。
以下是一个使用头节点的示例代码:
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
class LinkedList:
def __init__(self):
self.head = None
def traverse(self):
curr = self.head
while curr:
print(curr.val)
curr = curr.next
def insert(self, val):
if not self.head:
self.head = ListNode(val)
else:
new_node = ListNode(val)
new_node.next = self.head
self.head = new_node
def delete(self, val):
if not self.head:
return
if self.head.val == val:
self.head = self.head.next
else:
prev = self.head
curr = self.head.next
while curr:
if curr.val == val:
prev.next = curr.next
return
prev = curr
curr = curr.next
```
在这个示例中,我们定义了一个名为 `LinkedList` 的类,它包含一个头节点和三个方法:`traverse`、`insert` 和 `delete`。在 `traverse` 方法中,我们从头节点开始遍历整个列表,直到找到最后一个节点。在 `insert` 方法中,如果列表为空,则将新节点设置为头节点;否则,将新节点插入到头节点的前面。在 `delete` 方法中,我们需要特别处理头节点的情况,因为它没有前一个节点。如果要删除的节点是头节点,则将头节点更新为下一个节点;否则,我们遍历整个列表,找到要删除的节点,并更新前一个节点的 `next` 属性。