链表的构成:
对于一般的单项链表来说,是由一个一个结点构建起来的,而每个结点都具有相同的数据类型。
对于基础的链表来说,链表的结点具有 数据域和指针域 这两个数据类型。数据域来保存当前结点的数据,指针域来保存下一个结点的位置,这样就构成了一个完整的链表体系!
对于链表的优化:
在处理链表问题的时候,我们通常会提到关于头结点和头指针的区别:
头指针:头指针就是字面意思的指向第一个结点的指针。此外需要注意的是如果这个链表有头结点,那么这个指针是指向头结点的指针啦。其实头指针可以看成一个物体的特有标签,我们可以通过这个标签来看到物体本身。
头结点:头结点是为了方便对链表进行相关操作,而对链表提出优化的一个思路!我们可以对你所知道的链表最前面加上一个结点,这样对于链表头部的操作(比如头插法的应用),对链表的第二次命名(再声明一个指针指向这个链表)。头结点就像是一个物体的封面。
总而言之,把物体类比成视频。头指针是视频特有的标签,你通过这个标签只能搜索到这一个视频,而头结点是这个视频的封面。 这样看来头指针的地位似乎是要比头结点要高一点,毕竟头结点只是为了优化操作而制造出来的一个物品罢了。
对于链表的声明:
在平常做leetcode题目的时候,通常要求返回一个链表,我们可以构造一个链表是由头结点的
只需要这样声明:ListNode *p=new ListNode(-1); 让数据域变成-1;指针域指向null;这样对自己设置的链表有着更加简便的操作。而对于一般形参列表里面的链表是不会具有头结点这一个结构的大家要注意。就相当于这个结构表面上来说是不存在的,但是对于操作的链表来说最好可以带上。