链表的初始化
我们知道链表是由一个一个的小的节点组成的,所以我们先定义一个节点(LinkNode)的结构体变量,这个结构体变量拥有两个成员,数据域和指向下一个LINKNODE的指针。同时呢,我们也定义了一个普通的构造函数;考虑到新建节点一般是在新增的情况下需要,所以在构造函数中默认将指针域置空。
struct LinkNode
{
int val;
LinkNode * Next;
LinkNode(int val)
{
this->val = val;
this->Next = nullptr;
}
};
一般来说了,我们给定了一个链表的第一个节点的指针就可以对整个链表进行操作啦。但是,在对链表进行一些类似于删除指定元素、指定位置插入元素等操作时,使用带有头结点的链表通常可以让代码更简洁,思路也更清晰。所以在这里我们再新建一个LinkList的结构体,它有两个成员,第一个是ListNode 类型的节点,这个节点 的数据域没有意义,但是其指针域指向第一个数据节点,这句话很重要哦,后面在很多操作中都要用到的。
另外呢,我们为了方便后续的一些边界条件判断,另外再增加一个指针的成员size,它标识了链表中所有有效节点的个数(不包括头结点哦)。
struct LinkList
{
LinkNode * head;
LinkList();
int size;
//如果不需要头结点的话,只需要节点就可以用来表示链表了
LinkList * IniaLink();
void Push_back(int value);
void Print();
void Converse();
void nsert(int loca,int value);
void clear();
void Erase(int value);
//删除链表中所有 值为valu的数据
};
可以看到在上面的代码中,除了还有上文中提到的成员变量,我们还会在这里声明一些后面需要用到的成员函数,这些都是针对linkLIST类型的变量进行的操作。从初始化开始之后的函数分别为:
链表初始化,尾插,打印链表,反转链表,指定位置插入,清空链表,删除指定位置节点。
后面将会就这几个点进行一一的详解。