Я практиковал односвязный список в C ++ (практиковался, как найти начальный узел кругового списка), но обнаружил, что использование оператора -> очень сбивает с толку. Я использую Visual studio 2010 C ++ Express
Это отлично работает: head-> append (2) -> append (3) -> append (4) -> append (5)
Но это не не работает (для создания кругового связанного списка): head-> append (2) -> append (3) -> append (4) -> append (5) -> append (head-> next)
Когда я перехожу к этому методу и отлаживаю, мне кажется, что head-> next
неправильно передан в метод.
Но это работает:
Узел * tail = head-> append (2) -> append (3) -> append (4) -> append (5);
tail-> append (head-> next);
return c-> next
на return head
в двух методах, head-> append (2) -> append (3) -> append (4) -> append (5) -> append (head-> next)
также работает. Что мне здесь не хватает? Спасибо!
Подробности моего кода следующие:
void main(){
Node* head=new Node(1);
Node* tail=head->append(2)->append(3)->append(4)->append(5)->append(head->next);
cin.get();
}
class Node{
public:
Node* next;
int data;
bool marked;
Node(int d){
data=d;
marked=false;
next=NULL;
}
Node* append(int d){
Node* c=this;
while(c->next!=NULL){
c=c->next;
}
c->next=new Node(d);
return c->next;
}
Node* append(Node* n){
Node* c=this;
while(c->next!=NULL){
c=c->next;
}
c->next=n;
return c->next;
}
};