理解链表

链表是一种动态数据结构,因为在创建链表时,无须知道链表的长度。

当插入一个结点时,我们只需要为新结点分配内存,然后调整指针的指向来确保新结点被链接到链表当中。内存分配不是在创建链表时一次性完成,而是每添加一个结点分配一次内存。
由于没有闲置的内存,链表的空间效率比数组高。

单链表

整个链表的存取必须从头指针开始进行,头指针指示链表的第一个结点的存储位置。

区分首元结点、头结点、头指针

首元结点:链表中的第一个结点
头结点:首元结点之前附设的结点
头指针:指向链表中第一个结点的指针。若有头结点,则指向头结点,若无,则指向首元结点。

ListNode

ListNode为结构体,定义如下:

struct ListNode
{
    int val;
    ListNode *next;
    ListNode(int x): val(x), next(NULL){};
}