LC707 leetcode.cn/problems/de…
class MyLinkedList {
// 定义链表节点类
private static class Node {
int val;
Node next;
Node(int val) {
this.val = val;
}
}
private Node head; // 链表的头节点
private int size; // 链表的大小
// 初始化链表
public MyLinkedList() {
head = null;
size = 0;
}
/**
* 获取链表中第 index 个节点的值。如果索引无效,则返回 -1。
*
* @param index 目标节点的索引
* @return 节点的值,如果索引无效则返回 -1
*/
public int get(int index) {
if (index < 0 || index >= size) {
return -1;
}
Node cur = head;
for (int i = 0; i < index; i++) {
cur = cur.next;
}
return cur.val;
}
/**
* 在链表的头部添加一个值为 val 的节点。
*
* @param val 要添加的节点值
*/
public void addAtHead(int val) {
Node newNode = new Node(val);
newNode.next = head;
head = newNode;
size++;
}
/**
* 在链表的尾部添加一个值为 val 的节点。
*
* @param val 要添加的节点值
*/
public void addAtTail(int val) {
Node newNode = new Node(val);
if (head == null) {
head = newNode;
} else {
Node cur = head;
while (cur.next != null) {
cur = cur.next;
}
cur.next = newNode;
}
size++;
}
/**
* 在链表的指定索引 index 处插入一个值为 val 的节点。
* 如果索引等于链表的长度,则该节点将附加到链表的末尾。
* 如果索引大于链表长度,则不会插入节点。
*
* @param index 要插入节点的索引
* @param val 要插入的节点值
*/
public void addAtIndex(int index, int val) {
if (index > size) {
return;
}
if (index <= 0) {
addAtHead(val);
} else {
Node newNode = new Node(val);
Node cur = head;
for (int i = 0; i < index - 1; i++) {
cur = cur.next;
}
newNode.next = cur.next;
cur.next = newNode;
size++;
}
}
/**
* 删除链表中第 index 个节点,如果索引无效则不进行任何操作。
*
* @param index 要删除节点的索引
*/
public void deleteAtIndex(int index) {
if (index < 0 || index >= size) {
return;
}
if (index == 0) {
head = head.next;
} else {
Node cur = head;
for (int i = 0; i < index - 1; i++) {
cur = cur.next;
}
cur.next = cur.next.next;
}
size--;
}
}