对于链表
头指针的作用是便于插入与删除(头结点不记录data)
如果没有头指针,那么插入第一个点和删除第一个点会变成一个麻烦的操作,需要特殊考虑
插入
需要在第一个点时进行特殊考虑
int insert_index(node*& head, int index, node* p)
{
int i = 1;
if (head == NULL) //对于链表如果为空时的特殊考虑
{
if (index != 1)
return ERROR;
else
{
head = p;
head->next = NULL;
return OK;
}
}
node* current = head;
node* q = current;
if (index == 1) //对于插入第一个结点时的特殊考虑
{
p->next = current;
head = p;
return OK;
}
//普通正常的插入
while (current != NULL && i != index)
{
i++;
q = current;
current = current->next;
}
if (i != index)
{
return ERROR;
}
else
{
p->next = current;
q->next = p;
}
return OK;
}
删除操作
需要对删除第一个点做特殊考虑
int del(node*& head, int index)
{
int i = 1;
if (head == NULL)
return ERROR;
if (index == 1) //对删除第一个点做特殊考虑
{
head = head->next;
return OK;
}
node* current;
current = head;
node* q = current;
while (current!=NULL&&i!=index)
{
q = current;
i++;
current = current->next;
}
if (current == NULL || i != index)
return ERROR;
else
{
q->next = current->next;
}
free(current);
return OK;
}
而加入了头结点,那么第一个点就是在头结点后面的那个点,这样对于链表中所有结点的插入和删除都是同样的操作。