public class ListNode {
int val;
ListNode next;
ListNode(int x)
{ val = x; }
}
public class LinkedList {
private ListNode head; // 头节点
private int size; // 链表长度
// 构造函数,初始化一个空链表
public LinkedList() {
head = null;
size = 0;
}
// 在链表末尾添加一个节点
public void add(int val) {
ListNode node = new ListNode(val);
if (head == null) {
head = node;
} else {
ListNode p = head;
while (p.next != null) {
p = p.next;
}
p.next = node;
}
size++;
}
// 在链表开头添加一个节点
public void add(int index, int val) {
if (index <= 0) { // 如果index为0,直接在开头添加节点
addFirst(val);
} else if (index >= size) { // 如果index等于size,直接在末尾添加节点
add(val);
} else { // 否则,在指定位置插入节点
ListNode node = new ListNode(val);
ListNode p = head;
for (int i = 0; i < index - 1; i++) { // 找到插入位置的前一个节点
p = p.next;
}
node.next = p.next; // 将新节点插入到指定位置前一个节点的后面
p.next = node; // 将指定位置前一个节点的next指向新节点,完成插入操作
size++; // 链表长度加1
}
}
// 在链表开头添加一个节点
public void addFirst(int val) {
ListNode node = new ListNode(val);
node.next = head; // 将新节点的next指向原来的头节点,完成插入操作
head = node; // 将头指针指向新节点,完成插入操作
size++; // 链表长度加1
}
}