C++实现链表删除一位节点代码如下:
(考虑到空表,待删节点序号超出链表范围两种情况)
#include <iostream>
#include<stdio.h>
using namespace std;
int main()
{
struct node{
int data;
struct node *link;
};//定义节点数据类型
int nodeNum;//输入表长,供测试用
printf("请输入表长;\n");
scanf("%d",&nodeNum);
struct node *head,*p,*q;
if(nodeNum==0)
head=0;
else{
int data;
printf("请输入%d组int类型数据;\n",nodeNum);
scanf("%d",&data);
head=new struct node;
head->data=data;
head->link=0;
q=head;//创建头节点
int i;
for(i=1;i<nodeNum;i++){
scanf("%d",&data);
p=new struct node;
p->data=data;
p->link=0;
q->link=p;
q=q->link;
}//创建后续节点
}//建表
int n;//待删除节点序号
printf("请输入待删除节点的序号;\n");
scanf("%d",&n);
p=head;
int num=0;
while(p!=0){
num++;
p=p->link;
}//求表长
if(num==0)
printf("该表为空表\n");
else if(num<n+1)
printf("所删节点超出表长范围\n");
else{
if(n==0){
q=head;
head=head->link;
}
else{
p=head;
int j;
for(j=0;j<n-1;j++)
p=p->link;
q=p->link;
p->link=q->link;
}
delete q;//删除环节
p=head;
printf("输出结果为:\n");
while(p!=0){
printf("%d ",p->data);
p=p->link;
}
}//输出结果
while(head!=0){
p=head;
head=head->link;
delete p;
}//程序结束释放节点
return 0;
}