链表的定义:
struct Link
{
int data;
struct Link *next;
};
链表和顺序表区别就在下面的*next,这是指向下一个结构体的,里面存放的是下一个结构体的地址。
初始化链表(含头结点)
int LinkInit(Node **s)
{
*s = (Node *)malloc(sizeof(Node));
if(*s == NULL)
return failure;
(*s)->next = NULL;
return success;
}
需要注意的是:给头结点分配空间需要把头指针的地址传过去,分配完空间之后需要给下一个即next指针初始化,避免成为野指针。
链表的插入:
int LinkInsert(Node *s, int p, int n)
{
int i = 1;
if(s == NULL)
{
return failure;
}
Node *q = s;
while(q && i < p)
{
q = q->next;
i++;
}
Node *l = (Node *)malloc(sizeof(Node));
q = l;
l->next = q->next;
l->data = n;
return success;
}
其实插入式用for循环也可以,也比较容易理解,这个明天再写一下。