一.前言
链表的算法用java实现
二.题目
题意:删除链表中等于给定值 val 的所有节点。
示例 1: 输入:head = [1,2,6,3,4,5,6], val = 6 输出:[1,2,3,4,5]
示例 2: 输入:head = [], val = 1 输出:[]
示例 3: 输入:head = [7,7,7,7], val = 7 输出:[]
三.代码
// An highlighted block
import java.util.Scanner;
public class DeleteLinkedListElement {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Enter a list of numbers (separated by spaces):");
String input = scanner.nextLine();
String[] values = input.split(" ");
ListNode head = null;
ListNode tail = null;
for (String value : values) {
int num = Integer.parseInt(value);
if (head == null) {
head = tail = new ListNode(num);
} else {
tail.next = new ListNode(num);
tail = tail.next;
}
}
ListNode newHead = removeElements(head, 6);
printList(newHead); // 输出删除后的链表
}
public static ListNode removeElements(ListNode head, int val) {
ListNode dummy = new ListNode(-1, head);
ListNode pre = dummy;
ListNode cur = head;
while (cur != null) {
if (cur.val == val) {
pre.next = cur.next;
} else {
pre = cur;
}
cur = cur.next;
}
return dummy.next;
}
public static void printList(ListNode head) {
while (head != null) {
System.out.print(head.val + " ");
head = head.next;
}
}
}
class ListNode {
int val;
ListNode next;
public ListNode(int val) {
this.val = val;
}
public ListNode(int val, ListNode next) {
this.val = val;
this.next = next;
}
}
总结
java只有引用
创建链表数据结构,成员变量有int型的val,ListNode型的next。next是引用,链接到下一个节点。第一个构造函数public ListNode(int val),它接受一个整型参数val,此构造函数用于创建一个新的ListNode对象,其val成员变量被初始化为传入的参数值。此构造函数没有显式地设置next变量,因此next的默认值是null。第二个构造函数与第一个构造函数相比,它多接收了一个ListNode类型的参数next。这允许在创建ListNode对象时同时设置其值(val)和指向下一个节点的引用(next)。这种方式便于创建或扩展链表,因为你可以直接在构造函数中指定节点的后继。
removeElements(ListNode head, int val)使用第二个构造函数,用引用删除元素
最后main程序里使用scanner从键盘输入,并调用removeElements(ListNode head, int val)方法。