一、链表是什么?
对于初学者的我来说,不用像数组一样提前知道有多少个,可以直接读取文档里的数据,前提是知道格式。
这仅仅是小白我的理解,如果想知道具体的理论建议百度!
二、具体怎么写
1.结构体。
代码如下:
struct Node
{
int data; //数据域
struct Node* next; //指针域
};
2.生成结点函数。
代码如下:
struct Node* createNode(int data)
{
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
if (newNode == NULL)
{
return NULL;
}
newNode->data = data;
newNode->next = NULL;
return newNode;
}
3.打印函数。
代码如下:
void printList(struct Node* list)
{
struct Node* pMove = list;
while (pMove)
{
printf("%d\t", pMove->data);
pMove = pMove->next;
}
printf("\n");
}
4 .头插函数。
代码如下:
void insertNode(struct Node** list, int data)
{
//因为要改变表头指向所有需要二级指针
struct Node* newNode = createNode(data);
newNode->next = *list;
*list = newNode;
}
5.指定插函数。
void inserNodeByAppoin(struct Node** list, int data, int assign)
{
struct Node* rightNode = *list;
struct Node* leftNode = NULL;
while (rightNode != NULL && rightNode->data != assign)
{
leftNode = rightNode;
rightNode = leftNode->next;
}
if (rightNode == NULL)
{
printf("error!\n");
}
//指定位置可能插在头前面所以也要传二级指针
else if (leftNode == NULL)
{
insertNode(list, data);
}
else
{
//创建新的结点直接插就行
struct Node* newNode = createNode(data);
leftNode->next = newNode;
newNode->next = rightNode;
}
}
6主函数。
//调用函数就行
int main(void)
{
struct Node* List = createNode(1);
printList(List);
for (int i = 0; i < 3; i++)
{
insertNode(&List, i);
}
inserNodeByAppoin(&List, 600, 0);
printList(List);
return 0;
}