算法通关村第一关——链表青铜挑战笔记
使用 Java 构建链表
定义了一个名为 ListNode
的链表节点类。该类包含两个成员变量:
- val 表示节点的值,
- next 表示指向下一个节点的引用。
public class ListNode {
public int val; // 链表节点的值
public ListNode next; // 下一个节点的引用
// 构造函数
public ListNode(int val) {
this.val = val;
this.next = null;
}
}
使用链表
public class Main {
public static void main(String[] args) {
// 创建链表节点
ListNode node1 = new ListNode(1);
ListNode node2 = new ListNode(2);
ListNode node3 = new ListNode(3);
// 构建链表
node1.next = node2;
node2.next = node3;
// 遍历链表
ListNode curNode = node1;
while (curNode != null) {
System.out.print(curNode.val);
curNode = curNode.next;
}
}
}
链表新增元素
public class LinkedList {
private ListNode head; // 链表头节点
// 在链表头部插入元素
public void insertFirst(int val) {
ListNode newNode = new ListNode(val);
newNode.next = head;
head = newNode;
}
// 在链表尾部插入元素
public void insertLast(int val) {
ListNode newNode = new ListNode(val);
if (head == null) {
head = newNode;
} else {
ListNode curNode = head;
while (curNode.next != null) {
curNode = curNode.next;
}
curNode.next = newNode;
}
}
// 在指定位置插入元素
public void insert(int index, ListNode newNode) {
if (index < 0) {
System.out.println("无效的索引值");
return;
}
if (index == 0) {
newNode.next = head;
head = newNode;
return;
}
ListNode curNode = head;
int curPosition = 0;
while (curPosition < index - 1 && curNode != null) {
curNode = curNode.next;
curPosition++;
}
if (curNode == null) {
System.out.println("无效的索引值");
return;
}
newNode.next = curNode.next;
curNode.next = newNode;
}
}
链表删除元素
// 删除指定值的元素
public void delete(int val) {
if (head == null) {
System.out.println("链表为空,无法删除元素");
return;
}
if (head.val == val) {
head = head.next;
return;
}
ListNode currentNode = head;
while (curNode.next != null) {
if (curNode.next.val == val) {
curNode.next = curNode.next.next;
return;
}
curNode = curNode.next;
}
}