わかりました私はリストをまったく使用したことがありませんが、私が何をしようとしているのかを説明するために最善を尽くします.
struct node {
node(int value=0) { data=value; next=prev=this; }
int data;
node *next;
node *prev;
};
class list {
public:
list(int N=0, int value=0);
˜list();
bool empty() const { return N == 0; }
bool full() const { return false; }
int size() const { return N; }
void resize(int);
void clear();
void insert(int, const int &);
void remove(int);
void push_back(const int &din) { insert(N, din); }
void pop_back() { remove(N-1); }
const int & back();
int & operator[](int);
private:
int N;
node *head;
node *findnode(int);
}
_________________________________________
inline
node *list::findnode(int i) {
if (i == -1)
return head;
node *p = head->next;
while (i--)
p = p->next;
return p;
}
findnode()
の場合は前方検索をi<(N/2)
行い、 の場合は逆検索を行うように関数を書き直すことになっていi>(N/2)
ます。試してみましたが、セグメンテーション エラーが発生し続けます。何が起こっているのか正確にはわからないと思います。リスト クラスにリストされている他のすべての関数は、正しく記述されています。
Node 構造体を修正しました。これらのオブジェクトポインターと実際に何が起こっているのかについては、前もって申し訳ありません。これが私が試したものです。
97 inline
98 node *list::findnode(int i) {
99 if (i == -1)
100 return head;
101
102 if (i < N/2){
103 node *p = head->next;
104 while (i--)
105 p = p->next;
106
107 return p;
108 }
109
110
111 if (i > N/2){
112 node *p = head->prev;
113
114 i =( i - N/2 );
115 while (i--)
116 p = p->prev;
117
118 return p;
119 }
120 }