|
发表于 2013-7-21 15:17:07
|
显示全部楼层
第二题代码:有两个小bug,解决起来比较麻烦,所以没调了,:L,复杂度O(n)
#include<iostream>
#include<stdio.h>
#include<queue>
using namespace std;
typedef int ElemType; // 元素类型
#define MAX_SIZE 50 // 定义线性表的最大长度
typedef struct LNode {
ElemType data; // 数据域
struct LNode *next; // 指针域
} LNode, *LinkList; // 单链表节点
int n,x;
void delet(LNode* a) //删除操作
{
if(a==NULL)
return;
if(a->next==NULL)
{
if(a->data==x)
a=NULL;
return;
}
if(a->next->data==x)
{
LNode *b=a->next;
a->next=b->next; //递归
delet(a->next);
}
else
delet(a->next);
}
int main()
{
LNode L2[MAX_SIZE];
scanf("%d",&n); //输入节点数
for(int i=0;i<n;i++)
{
scanf("%d",&L2[i].data); //输入数据
L2[i].next=&L2[i+1];
}
L2[n-1].next=NULL;
scanf("%d",&x); //输入待删除的数
LNode *head=&L2[0];
if(L2[0].data==x)
{
head=&L2[1];
}
delet(&L2[0]);
while(head!=NULL) //打印操作后的链表
{
printf("%d ",head->data);
head=head->next;
}
printf("\n");
return 0;
} |
评分
-
查看全部评分
|