用java设有一个带头结点的单链表L,编写一个算法删除表中所有值为x的结点
时间: 2024-09-25 20:05:31 浏览: 80
小白算法积累——单链表15#2个带头结点单链表+提取公共元素+二表合一
在 Java 中,如果你需要从一个带头节点的单链表中删除所有值为 `x` 的节点,可以按照以下步骤设计算法:
首先,我们需要定义一个链表节点类,包含数据域 `data` 和指向下一个节点的指针 `next`:
```java
class Node {
int data;
Node next;
public Node(int data) {
this.data = data;
this.next = null;
}
}
```
然后,你可以创建一个辅助函数来遍历链表并删除满足条件的节点:
```java
public void deleteNodes(Node head, int x) {
// 如果头节点就是要删除的目标
if (head != null && head.data == x) {
head = head.next; // 跳过头部的x节点
}
// 遍历链表
Node current = head;
while (current != null) {
// 如果当前节点的数据等于x,跳过它并连接下一个节点
if (current.data == x) {
Node nextNode = current.next;
current.next = nextNode.next; // 删除当前节点
if (nextNode == null) { // 如果刚刚删除的是最后一个节点,更新头节点
head = current;
}
} else {
current = current.next;
}
}
}
```
这个算法的时间复杂度是 O(n),其中 n 是链表的长度,因为它需要遍历整个链表一次。
阅读全文