对于单链表的插入删除问题,在之前的文章中已经介绍过,今天要介绍的是无头单链表的插入和删除问题。这里所指的无头单链表指的是假设我们只知道单链表的某个部分,而不是全部,要对其进行插入和删除操作,如下图:
那么,对于这种的单链表,我们如何对其进行插入和删除操作呢?首先我们来看无头单链表的插入,如果我们要在pos的后面插入一个结点,则只需改变pos和newNode的next的指向即可,如下图:
代码如下:
void InsertNoOrderBack(List *pos, int data)
{
List *newNode = CreateNode(data);
newNode->next = pos->next;
pos->next = newNode;
}
如果要在pos的前面插入一个结点,则先让newNode的data等于pos的data,然后再改变pos和newNode的next域。如图:
代码如下:
void InsertNoOrderList(List *pos, int data)
{
List *newNode = CreateNode(data);
newNode->data = pos->data;
newNode->next = pos->next;
pos->data = data;
pos->next = newNode;
}
如果要删除pos结点,也是很容易的,即先用一个变量del标记pos的next域,再将del的数据覆盖pos位置。如图:
代码如下:
void RemoveNoOrderList(List *pos)
{
List *del = pos->next;
pos->data = del->data;
pos->next = del->next;
free(del);
}