我想实现链表自动删除特定类元素,比如能被三整除的数.
但运行时输入很奇怪,似乎不能输入两位数即以上的数,我不明白是哪里出了问题.
#include<stdio.h>
#include<iostream>
using namespace std;
#include<stdlib.h>
typedef int Status;
typedef char Elemtype;
typedef struct LNode {//定义链表
Elemtype Data;
//Elemtype* next;
struct LNode *next;
}LNode,*LinkList;
int Inilist(LinkList &L){//初始化链表//int 型
L = new LNode;
L->next = NULL;
return OK;
}
void Create_List(LinkList &L,Elemtype n){
L = new LNode;
L -> next = NULL;
LNode *R = L;
for(int i = 1; i <= n; i++){
LNode *S;
S = new LNode;
cin >> S->Data;
S->next = NULL;
R->next = S;
R = S;
}
}
void Delete(LinkList &L){
LNode *p = L->next;
LNode *Target = L;
while(p){
if(p->Data % 3 == 0){
Target ->next = p->next;//假设第一个就能被三整除
free(p);//释放目标数据
p = Target ->next;
}
else{
Target = p;//不被三整除,就往后挪一个位置继续找
p = p->next;//为下一次循环做准备
}
}
}
void PrintList(LinkList &L){
LNode *P;
P = new LNode;
P = L -> next;
while(P){
cout << P->Data << " ";
P = P->next;
}
cout << endl;
}
int main() {
int n = 0;
LinkList LA;
Inilist(LA);
cin >> n;
Create_List(LA, n);
PrintList(LA);
Delete(LA);
PrintList(LA);
return 0;
}