学链表了,好不熟悉好难啊感觉,先把链表和数组做一个对比吧
数组在定义的时候,长度就是固定的,如果想改动数组的长度,就需要重新定义一个新的数组。
链表的长度可以是不固定的,并且可以动态增删, 适合数据量不固定,频繁增删,较少查询的场景。
链表的构造:
JAVA
public class ListNode {
// 结点的值
int val;
// 下一个结点
ListNode next;
// 节点的构造函数(无参)
public ListNode() {
}
// 节点的构造函数(有一个参数)
public ListNode(int val) {
this.val = val;
}
// 节点的构造函数(有两个参数)
public ListNode(int val, ListNode next) {
this.val = val;
this.next = next;
}
}
Python
class ListNode:
def __init__(self, val, next=None):
self.val = val
self.next = next
删除链表节点要分,如果是第一个链表节点,那就不好删,如果中间的节点,就要让前一个的next指向后后一个节点的head以此跳过中间的节点。所以如果是普通的删除方法,就要进行一个判断看看是不是头节点。
有没有不用判断的方法呢?===> 虚拟头节点
注意⚠️如果我们要删除一个元素1 -- > 2 --> 3例如我们要删除2,我们一定要知道上一个节点指的是什么,也就是1
删除的操作为:current = current.next.next