链表删除一位节点

it2025-12-21  6

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; }
最新回复(0)