1.删除无头单链表的非尾节点
函数原型:void DelNotTail(pNode pos);
分析:无头单链表与有头单链表的区别在于找其中的节点不能使用遍历的方法,我们这里定义一个指针cur,让它指向pos的next,然后将cur->data给pos->data,pos->next指向cur->next,最后将cur删除。
void DelNotTail(pNode pos)//删除无头单链表的非尾节点
{
pNode cur = pos;//替换删除
cur = cur->next;
pos->data = cur->data;
pos->next = cur->next;
free(cur);
}
2.插入一个元素到无头链表指定位置
函数原型:void InsertFrontNode(pNode pos, DataType d);
分析:
和第一个有类似的想法,动态开辟一个空间存放一个节点(p)的数据,定义一个cur指针,让它指向pos的下一节点,然后在pos后边插入这个元素,p->next指向cur,将p->data与pos->data交换。
void InsertFrontNode(pNode pos, DataType d)//插入一个元素到无头链表指定位置
{
assert(pos != NULL);
pNode cur = pos;
DataType tmp = 0;
Node *p = malloc(sizeof(Node));//动态开辟一块内存用来存放插入的元素
memset(p, 0, sizeof(Node));
p->data = d;
p->next = NULL;
p->next = cur->next;
cur->next = p;
tmp = p->data;//交换数据
p->data = cur->data;
cur->data = tmp;
}