2

重複の可能性:
リンクされたリストを元に戻すことができません

リンクされたリストを逆にしようとしています:

void LinkedList::reverseList()
{
    Node *next=_head;
    Node *prev=0;
    while(next!=0)
    {
        Node *tmp=next->_next;
        next->_next=prev;
        prev=next;
        next=tmp;
    }
}

リストが 4->3->2->1 であるとしましょう。

リストを印刷すると、1つしか表示されません(印刷機能は良好です)。

何か助けはありますか?

ありがとう

4

3 に答える 3

1

このようなことを試してください。

双方向リスト:

for (Node * n = _head, * next; ; n = next)
{
    next = n->next;

    std::swap(n->next, n->prev);

    if (next == NULL) { _head = n; break; }
}

片方向リスト:

for (Node * n = _head, * prev = NULL, * next; ; prev = n, n = next)
{
    next = n->next;

    n->next = prev;

    if (next == NULL) { _head = n; break; }
}
于 2012-10-23T15:25:52.587 に答える
0

私は再帰が好きです。把握と確認が簡単です。

Node* LinkedList::reverseList() { // returns tail
  if (!_head || !_head->_next)
      return _head;
  Node* const h = _head;
  _head = _head->_next;
  h->_next = NULL;
  return reverseList()->_next = h;
}
于 2012-10-23T15:35:29.170 に答える