无头单链表的插入删除问题

对于单链表的插入删除问题,在之前的文章中已经介绍过,今天要介绍的是无头单链表的插入和删除问题。这里所指的无头单链表指的是假设我们只知道单链表的某个部分,而不是全部,要对其进行插入和删除操作,如下图:

那么,对于这种的单链表,我们如何对其进行插入和删除操作呢?首先我们来看无头单链表的插入,如果我们要在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);
}

猜你喜欢

转载自blog.csdn.net/qq_37415461/article/details/82831348