若单链表L(无头结点)则如何求出链表长度len?
时间: 2023-07-17 19:05:17 浏览: 256
对于无头结点的单链表L,可以通过遍历链表的方式来求出链表的长度len。具体的算法如下:
1. 初始化计数器count为0,指针p指向链表的第一个节点L。
2. 当p不为空时,执行以下步骤:
- 将计数器count加1。
- 将指针p指向下一个节点。
3. 当p为空时,跳出循环。
4. 返回计数器count的值,即为链表的长度len。
这样就可以通过遍历链表并计数的方式来求出链表的长度。
相关问题
2. 1 7 试写一算法,在无头结点的动态单链表上实现线性表操作 I nsert( L, i , b),并和在带头结点的动态单 链表上实现相同操作的算法进行比较,用C++编写
无头结点的动态单链表实现线性表操作 Insert(L, i, b) 的算法:
1. 如果 i<=0,则将 b 插入到链表的第一个位置,使其成为新的头结点。
2. 如果 i>0,则从头结点开始遍历链表,找到第 i-1 个结点,然后将 b 插入到第 i-1 个结点之后,使其成为第 i 个结点。
与带头结点的动态单链表实现相同操作的算法相比,无头结点的动态单链表实现 Insert 操作需要额外考虑头结点的插入问题,需要在插入第一个元素时进行特殊处理。而带头结点的动态单链表实现 Insert 操作则不需要额外处理头结点的插入问题,只需要从头结点开始遍历即可。
下面是用 C++ 实现无头结点的动态单链表实现线性表操作 Insert(L, i, b) 的算法:
```cpp
#include<iostream>
using namespace std;
struct Node {
int data;
Node* next;
};
void Insert(Node*& L, int i, int b) {
Node* p = L;
Node* q = new Node;
q->data = b;
q->next = NULL;
if (i <= 0) { // 在链表头插入元素
q->next = L;
L = q;
}
else {
for (int j = 1; j < i && p; j++) {
p = p->next;
}
if (p) { // 找到第 i-1 个结点
q->next = p->next;
p->next = q;
}
}
}
int main() {
Node* L = NULL; // 初始化链表
Insert(L, 0, 1); // 在链表头插入元素
Insert(L, 1, 2); // 在链表第二个位置插入元素
Insert(L, 1, 3); // 在链表第二个位置插入元素
// 遍历链表
Node* p = L;
while (p) {
cout << p->data << " ";
p = p->next;
}
return 0;
}
```
以上是无头结点的动态单链表实现 Insert 操作的 C++ 实现代码。
怎么用python创建无头结点的单链表
可以使用Python中的类来表示单链表,每个节点包含数据和指向下一个节点的指针。无头结点的单链表通常需要在插入和删除节点时特别处理。
下面是一个示例代码,创建一个无头结点的单链表,并添加几个节点:
```python
class Node:
def __init__(self, data=None):
self.data = data
self.next = None
class LinkedList:
def __init__(self):
self.head = None
def add(self, data):
new_node = Node(data)
if not self.head:
self.head = new_node
else:
current_node = self.head
while current_node.next:
current_node = current_node.next
current_node.next = new_node
linked_list = LinkedList()
linked_list.add(1)
linked_list.add(2)
linked_list.add(3)
```
在上面的示例中,我们定义了两个类,一个是节点类Node,一个是单链表类LinkedList。每个节点包含一个数据和一个指向下一个节点的指针。单链表类包含一个头节点,初始值为None,表示一个空链表。我们提供了一个add()方法来添加新节点。
在add()方法中,如果链表为空,则将新节点设置为头节点。否则,我们遍历链表找到最后一个节点,并将新节点添加到最后一个节点的next属性中。
注意,由于这是一个无头结点的单链表,我们需要特别处理在链表开头插入节点的情况。在这种情况下,我们需要将新节点设置为头节点,并将它的next属性指向原来的头节点。在删除节点时,我们需要特别处理删除头节点的情况。
阅读全文