編集
簡単にするために、私は、リストを単純に通過する最も基本的なカーソルを作成したいと思っています。これは、方法や形状を変更したり、「開始」を形成したりすることはありません。私はまだ何かを返すときに変更され始めたいと思っていますが、直前ではありません。それで、新しいノードを追加したいときを除いて、何も変更せずにリストを調べて開始するためのポインターを作成することは可能ですか?
また、「ノード」ではない単純なポインタを使用してリストをたどることはできますか?
/編集
宿題の一部として作成する簡単な(単一の)リンクリストがあります。もちろん、それ以外にもやることはたくさんありますが、リストを邪魔にならないようにした後は、すべてを順調に進める必要がありますが、C ++をしばらく使用している間(ボーランドC ++でした)、私は多くのことをしました知っていたのは、半分忘れられているか、時代遅れです。私はしばらくの間Pythonでプログラミングしましたが、それはつまり、C++でのポインターの動作に不満を感じ続けるということです。
私の問題は、リストに新しいノードを追加しようとすると、カーソルが異常な方法で動作することです。以下で説明します。
編集:わかりました、私は変更しました:
Node *cursor;
cursor = new Node
cursor = begin;
大失敗ですが、宣言カーソルの後の結果は同じで、両方が同じメモリ位置(0x32ce8のようなもの)で始まります。
/編集
Node *add_node (Node *begin,string type, int sum, int ap_nr) // begin is the first node in the list
{
// if first node is dummy node
if (begin->ap_nr == -1)
{
begin->type = type;
begin->ap_nr = ap_nr;
begin->sum = sum;
begin->next = 0;
return begin;
}
// else create new node and insert it in sorted position
else
{
// EDIT:
Node *cursor = begin; // Same problem
//if node should be inserted before first node (begin)
if (ap_nr <begin->ap_nr)
{
cursor->ap_nr = ap_nr;
cursor->type = type;
cursor->sum = sum;
cursor->next = begin;
return cursor;
}
常にデバッグするとき、beginは同様の形式です:0x32ce02、「カーソル」を作成するとき、それは大きく異なる形式(より長い)ですが、これを行うと:cursor = begin、カーソルはこの0x32df02のようになります。
ただし、問題は、「if(ap_nr ap_nr)」に到達したときに、実行可能な理由がまったくないため、カーソルが0x32ce02になり、「cursor-> next=begin」が無限ループを保証することです。また、ノードをいくつ追加しても、これは常に発生するため、リストを印刷するたびに、最後に追加されたノードの無限のストリームになります。
私は何か間違ったことをしていますか?それは宣言ですか、それとも割り当て、作成ですか?なにか ?
また、ポインタが*別のモジュールのどこかで始まり、この関数を使用して新しいbeginを返す場合...それは機能するはずですよね?
PS私はまた簡単なカウンターソリューションをいただければ幸いです(私のものがちょうど良くない場合にこれを行う別の方法)
また、私がどのようにリストを作成したかを指摘する必要があります。これは、ノードの単純なリンクです。
struct Node {
string type;
int ap_nr;
int sum;
Node *next;
};