采用递归方式求不带头结点的单链表的长度
时间: 2023-05-30 11:02:18 浏览: 221
以下是Python代码:
```python
def get_length(head):
if head is None:
return 0
else:
return 1 + get_length(head.next)
```
其中,`head` 表示链表的头结点。如果链表为空,直接返回长度为0。否则,递归地求出链表中除头结点外剩余部分的长度,并加上头结点,即为整个链表的长度。
相关问题
采用递归方式求不带头结点的单链表的长度的C语言代码
```
int getLength(Node* head) {
if(head == NULL) { // 空链表
return 0;
}
else {
return 1 + getLength(head->next); // 递归求解
}
}
```
其中,Node为单链表节点的结构体定义。
递归删除不带头结点的单链表中所有值为x的结点
递归删除不带头结点的单链表中所有值为x的结点,可以使用递归的方式实现。具体步骤如下:
1. 如果链表为空,直接返回。
2. 对于非空链表,递归删除其后续部分中值为x的结点。
3. 如果当前结点的值为x,则删除当前结点,即将其后继结点作为当前结点,继续递归删除后续部分中值为x的结点。
4. 如果当前结点的值不为x,则保留当前结点,将其后继结点作为当前结点,继续递归删除后续部分中值为x的结点。
代码实现如下:
```C++
void deleteNode(Node *node, int x) {
if (node == nullptr) { // 链表为空,直接返回
return;
}
if (node->val == x) { // 当前结点的值为x,删除当前结点
Node *temp = node;
node = node->next;
delete temp;
deleteNode(node, x); // 递归删除后续部分中值为x的结点
} else { // 当前结点的值不为x,保留当前结点
deleteNode(node->next, x); // 递归删除后续部分中值为x的结点
}
}
```
其中,`Node` 表示链表结点,包括一个整数值 `val` 和一个指向下一个结点的指针 `next`。使用时,调用 `deleteNode(head, x)` 即可删除不带头结点的单链表 `head` 中所有值为 `x` 的结点。