-3
リンクされたリストが1つあり、N番目の要素を取得しようとしています。私はそれを取得するための関数を作成しましたが、それは動作していないようです。リンクされたリストからN番目の要素を取得するC++
必要な場合、これは全体のコードです:
#include <iostream>
using namespace std;
class List
{
private:
typedef struct node
{
int data;
node* next;
} *nodePtr;
nodePtr head;
nodePtr curr;
nodePtr temp;
public:
List()
{
head = NULL;
curr = NULL;
temp = NULL;
}
void AddNode (int addData)
{
nodePtr NewNode = new node;
NewNode->next = NULL;
NewNode->data = addData;
if (head != NULL)
{
curr = head;
while(curr->next != NULL)
{
curr = curr->next;
}
curr->next = NewNode;
}
else
{
head = NewNode;
}
}
void DeleteNode (int delData)
{
nodePtr delPtr = NULL;
temp = head;
curr = head;
while ((curr != NULL) && (curr->data !=delData))
{
temp = curr;
curr = curr->next;
}
if (curr == NULL)
{
cout << delData << " was not in the list " << endl;
delete delPtr;
}
else
{
delPtr = curr;
curr = curr->next;
temp->next = curr;
if (delPtr == head)
{
head = head->next;
temp = NULL;
}
delete delPtr;
cout << "The value " << delData << " was deleted" << endl;
}
}
int getNth(int index)
{
nodePtr curr = head;
int counter = 0;
while (counter != NULL)
{
if (counter == index)
{
cout << curr->data;
}
counter++;
curr = curr->next;
}
}
void printList()
{
curr = head;
while(curr != NULL)
{
cout << curr->data << " ";
curr = curr->next;
}
}
/*
void printNode()
{
curr = head;
//if curr->next is NULL, we know that curr must be the last element
while(curr != NULL && curr->next != NULL)
{
curr = curr->next;
}
cout << curr->data;
}
*/
/*
void DeleteLastNode()
{
curr = head;
nodePtr delPtr = NULL;
while(curr != NULL && curr->next != NULL)
{
curr = curr->next;
}
if (curr->next == NULL)
{
delPtr = curr;
curr = curr->next;
temp->next = curr;
if (delPtr == head)
{
head = head->next;
temp = NULL;
}
delete delPtr;
}
}
*/
};
int main()
{
List text;
text.AddNode(1);
text.AddNode(2);
text.AddNode(3);
text.AddNode(4);
text.AddNode(5);
text.AddNode(6);
text.AddNode(7);
text.AddNode(8);
text.AddNode(9);
text.AddNode(10);
text.printList();
cout << endl;
text.DeleteNode(2);
text.printList();
return 0;
}
そして、これは私が持つ問題を抱えての関数である:
int getNth(int index)
{
nodePtr curr = head;
int counter = 0;
while (counter != NULL)
{
if (counter == index)
{
cout << curr->data;
}
counter++;
curr = curr->next;
}
}
はおそらく、あなたが '意味行う前にnullであるかどうかを確認(CURR!= NULL)' –
あなただけ使用した場合、 'のstd :: list'(または'のstd ::ベクトル')を使用すると、単純に[std :: nth_element](http://en.cppreference.com/w/cpp/algorithm/nth_element)を使用することができます。 –
また、所望のカウンタ***に到達したときにループを破る。 if(counter == index) { cout << curr-> data;ブレーク; } – Ibrahim