Оператор -> не работает должным образом в C ++

Я практиковал односвязный список в 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 неправильно передан в метод.

Но это работает:

  1. Узел * tail = head-> append (2) -> append (3) -> append (4) -> append (5); tail-> append (head-> next);
  2. Или после того, как я изменю 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;
    }
};
5
задан user1128516 4 January 2012 в 01:02
поделиться