试设计一个算法int Delete_Elem(SqList &L,ElemType e)从L中删除与e相等的数据元素,并返回删除后的L的长度
时间: 2024-09-15 13:12:56 浏览: 39
设计一个名为`Delete_Elem`的算法,用于从给定的单链表`SqList& L`中删除所有等于`ElemType e`的数据元素,然后返回新链表的长度,可以按照以下步骤来进行:
1. 定义两个指针,一个指向当前节点`current`,另一个用于存储下一个节点`next`。
2. 初始化指针`current`为链表头`L.getHead()`,并设置`length`变量为0,表示初始链表长度。
3. 当`current`不为空时,执行循环:
a. 检查当前节点的值`current->data`是否等于目标元素`e`。
b. 如果相等,则删除当前节点:
i. 更新`next`为当前节点的下一个节点。
ii. 链表头更新为`next`(如果`current`是头节点)。
iii. 将`current`设为`next`以便访问下一个节点。
c. 否则,将`current`和`next`都向前移动一位。
d. `length++`,表示链表长度加一。
4. 循环结束后,链表中的元素已更新为不包含`e`的值,返回`length`作为新链表的长度。
```cpp
int Delete_Elem(SqList& L, ElemType e) {
current = L.getHead();
length = 0;
while (current != nullptr) {
if (current->data == e) {
next = current->next;
if (current == L.getHead()) {
L.setHead(next);
} else {
prev->next = next;
}
delete current; // 删除节点
} else {
prev = current;
}
current = next;
length++;
}
return length;
}
```
阅读全文