链表,作为数据结构中非线性表的数据结构,其重点表现在:逻辑相邻,空间不相邻。
图一表现为:无哨兵位的单链表,图二表现为:有哨兵位的单链表。
有哨兵位的单链表实施起来难度较小,那么今天我们的重点放在无哨兵位的单链表。
同样的,首先我们先将链表元素类型重定义,方便应对多种情况:
typedef int SLDatatype;
然后我们定义链表结点的结构体:包含data,和下一个结点的地址
typedef struct SListNode
{
SLDatatype data;
struct SListNode* next;
}SLNode;
对于链表,我们就不需要作初始化操作了,初始化也不过是把头结点初始化为NULL,那不如直接创建一个空指针。
下面我们直接开干,将链表的各类操作实现一波。
在开始操作之前,由于涉及到插入新结点,所以我们先写一个结点创造函数(简单):
SLNode* CreatNode(SLDatatype x)
{
SLNode* newnode = (SLNode*)malloc(sizeof(SLNode));
if (newnode == NULL)
{