按位序删除(带头结点)
#define NULL 0
#include<stdlib.h>typedef struct LNode
{int data;struct LNode* next;
}LNode, * LinkList;//按位序删除(带头结点)
bool ListInsert(LinkList& L, int i, int& e) {if (i < 1)return false;LNode* p = L; //指针p指向当前扫描结点,目前指向头结点,是第0个int j = 0; //当前p指向第几个结点while (p != NULL && j < i - 1) //循环指到第i-1个结点{p = p->next;j++;}if (p == NULL) //i值不合法return false;if (p->next == NULL) //第i-1结点之后已无其他结点return false;LNode* q = p->next; //令q指向即将删除结点e = q->data; //用e返回元素的值p->next = q->next; //将*q结点从链中断开free(q); //释放结点的存储空间return true;
}
指定结点的删除
//删除指定结点p
bool DeleteNode(LNode* p) {if (p == NULL)return false;LNode* q = p->next; //令q指向*p的后继结点p->data = p->next->data; //和后继结点交换数据p->next = q->next; //将*q结点从链中断开free(q); //释放后继结点的存储空间return true;
}
如果要删除的结点p是最后一个元素,代码不适用会报错