java实现单链表删除给定值
时间: 2023-09-28 16:10:16 浏览: 92
以下是Java实现单链表删除给定值的示例代码:
```
class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
class Solution {
public ListNode removeElements(ListNode head, int val) {
ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode prev = dummy;
ListNode curr = head;
while (curr != null) {
if (curr.val == val) {
prev.next = curr.next;
} else {
prev = curr;
}
curr = curr.next;
}
return dummy.next;
}
}
```
在这个示例中,我们使用了一个虚拟头节点`dummy`来简化代码,使得头节点和其他节点的操作一致,而不需要特殊处理。我们遍历链表,如果当前节点的值等于给定值,就删除该节点,否则继续遍历。最后返回虚拟头节点的下一个节点作为新的头节点。
相关问题
pta编写java程序实现单链表插入、删除结点等基本算法。给定一个单链表和一系列插入、删除结点的操作序列,输出实施上述操作后的链表。单链表数据域值为整数。
要实现单链表的插入、删除结点等基本算法,可以按照以下步骤进行操作:
1. 创建一个表示链表结点的类,该类包含一个整数数据域和一个指向下一个结点的指针。
2. 创建一个链表类,该类包含一个指向链表头结点的指针。
3. 实现链表类的构造函数,使其初始化链表为空链表。
4. 实现链表类的插入结点方法,该方法接收两个参数:要插入的位置和要插入的数值。首先判断插入位置是否合法,如果不合法则忽略该操作。如果插入位置为0,则在链表头部插入结点;否则,在指定位置后插入结点。
5. 实现链表类的删除结点方法,该方法接收一个参数:要删除的位置。首先判断删除位置是否合法,如果不合法则忽略该操作。如果删除位置为1,则删除链表头结点;否则,删除指定位置后的结点。
6. 实现链表类的输出方法,用于输出链表的所有结点数值。
7. 根据输入的操作序列,依次进行插入或删除操作,并在每次操作后输出链表的所有结点数值。
请编写java程序实现单链表插入、删除结点等基本算法。给定一个单链表和一系列插入、删除结点的操作序列,输出实施上述操作后的链表。单链表数据域值为整数。
单链表是由一系列结点组成的,每个结点包含一个数据域和一个指针域。数据域用来存储元素的值,指针域用来指向下一个结点。下面是使用Java编写的单链表插入和删除结点的基本算法:
```java
// 定义单链表的结点类
class ListNode {
int val;
ListNode next;
ListNode(int val) {
this.val = val;
this.next = null;
}
}
// 定义单链表类
class LinkedList {
ListNode head;
// 在链表尾部插入结点
public void insert(int val) {
ListNode newNode = new ListNode(val);
if (head == null) {
head = newNode;
} else {
ListNode current = head;
while (current.next != null) {
current = current.next;
}
current.next = newNode;
}
}
// 删除指定值的结点
public void delete(int val) {
if (head == null) {
return;
}
if (head.val == val) {
head = head.next;
} else {
ListNode current = head;
while (current.next != null && current.next.val != val) {
current = current.next;
}
if (current.next != null) {
current.next = current.next.next;
}
}
}
// 输出链表的元素值
public void printList() {
ListNode current = head;
while (current ! null) {
System.out.print(current.val + " ");
current = current.next;
}
System.out.println();
}
}
// 测试
public class Main {
public static void main(String[] args) {
LinkedList list = new LinkedList();
list.insert(1);
list.insert(2);
list.insert(3);
list.printList();
list.delete(2);
list.printList();
}
}
```
以上是一个简单的单链表的插入和删除结点的示例程序。
阅读全文