头部声明如下
#include <iostream>
#include <malloc.h>
using namespace std;
typedef int ElemType;
typedef struct LNode{
ElemType data;//存放数据元素值
struct LNode *next;
}LinkNode;
以下是主函数:
int main(){
ElemType a[5]={1,4,8,3,5};//定义ElemType类型的数组
LinkNode *L;
int x;//要删除的值
Create_LinklistHead(L,a,5);//创建不带头结点的单链表
Display(L);//输出单链表
cout<<endl;
cout<<"输入你想要删除的值:";
cin>>x;
Del_X_3(L,x);//删除单链表的函数
Display(L);
return 0;
}
删除函数如下:
void Del_X_3(LinkNode *&L,ElemType x){
LinkNode *p;
if(L==NULL) return;
if(L->data==x){
p=L;
L=L->next;
free(p);
Del_X_3(L,x);
}
else
Del_X_3(L->next,x);
}
输出函数如下:
void Display(LinkNode *&L){
LinkNode *p=L;
while(p!=NULL){
cout<<p->data<<" ";
p=p->next;
}
}
头插法创建单链表:
void Create_LinklistHead(LinkNode *&L,ElemType a[],int n)//采用头插法
{
int i;
LinkNode *q;
L=NULL;
for(i=0;i<n;i++)
{
q=(LinkNode *)malloc(sizeof(LinkNode));//生成新节点
q->data=a[i];
q->next=L; //将L所指向的地址赋给新生成的节点指针
L=q; //头指针指向新生成节点
}
}