#include<iostream>
using namespace std;
struct Node{
int x;
Node *next;
};
typedef struct Node * PtrToNode;
typedef PtrToNode List;
typedef PtrToNode Position;
void Print(List L)
{
Position P = L;
while (P != NULL)
{
cout << P->x << " ";
P = P->next;
}
}
List InsertBeg(List L, int x){
Node *tmp = new Node;
tmp->x = x;
if (L == NULL)
{
tmp->next = NULL;
L = tmp;
}
else
{
tmp->next = L;
L = tmp;
}
return L;
}
Position FindLast(List L){
Position P = L;
if (L != NULL)
while (P->next != NULL)
P = P->next;
return P;
}
List deleteFirst(List L) {
Position P = L;
L = L->next;
P->next = NULL;
delete P;
return L;
}
Position FindX(List L, int x){
Position P = L;
while (P != NULL && P->x != x){
P = P->next;
}
return P;
}
Position FindPrevPos(List L, Position P){
Position prev = L;
if (L != NULL)
if (P != NULL && (P != L))
while (prev->next != P)
prev = prev->next;
return prev;
}
List deleteLast(List L) {
Position last = FindLast(L);
Position prev = FindPrevPos(L, last);
prev->next = NULL;
delete last;
return L;
}
List deleteX(List L, int x)
{
Position P = FindX(L, x);
if (P == L)
L = deleteFirst(L);
else if (P->next == NULL)
L = deleteLast(L);
else {
Position prev;
prev = FindPrevPos(L, P);
prev->next = P->next;
P->next = NULL;
delete P;
}
return L;
}
List deleteeven(List L){
Position P = L;
while (P != NULL)
{
if (P->x % 2 == 0)
P = deleteX(L, P->x);
P = P->next;
}
return L;
}
int main()
{
List L = NULL;
L = InsertBeg(L, 4);
L = InsertBeg(L, 8);
L = InsertBeg(L, 1);
L = InsertBeg(L, 21);
Print(L);
L = deleteeven(L);
cout << "After deleting the even numbers";
Print(L);
cin.get();
cin.get();
return 0;
}
私はevensではないオッズを削除する必要がありますが、私はこれをevensに対して持っていますが、修正してオッズを削除する必要があります私はオッズを削除するためにそれを変更することはできません!あなたがこれを修正して、オッズを削除する代わりに、それをたくさんいただければ幸いです。特定のリンクリストで奇数の要素を削除するコードを書く
ありがとうございます! STDを使用して
このような問題を解決する適切なツールは、デバッガです。スタックオーバーフローを尋ねる前に、コードを一行ずつ進める必要があります。詳しいヘルプは、[小さなプログラムをデバッグする方法(Eric Lippert)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)を参照してください。最低限、問題を再現する[最小、完全、および検証可能](http://stackoverflow.com/help/mcve)の例と、その問題を再現するためのデバッガ。 –
ようこそスタックオーバーフロー。 [The Tour](http://stackoverflow.com/tour)を読み、[ヘルプセンター](http://stackoverflow.com/help/asking)の資料を参考にしてください。ここに聞いてください。 –
誰かがIOストリームでCを教えているようです。このパスをあまりにも遠くに先行させる前に、[良い本を手に入れる](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)とCとC++の違いを学んでください。 – user4581301