-1

重複の可能性:
単一リンクリストを逆方向に読み取る方法は?
LinkedList c++ を逆にする

使用せずreverseに接続の要素を取得するにはどうすればよいですかlistarrays

(私の問題であるポインターのみを使用する必要があります)。

4

3 に答える 3

1

ノードのコンテンツやスタックを交換する必要はありません。単一リンクリストを逆にしたい場合は、反復ループ内でポインターのペアと中間ポインターを使用してウォークします。終了したら、ヘッド ポインターを更新することを忘れないでください。

void reverse_list(node **head)
{
    node *cur=NULL, *nxt=NULL;

    if (!(head || *head || (*head)->next))
        return;

    nxt = *head;
    while (nxt != NULL)
    {
        node *prv = cur;
        cur = nxt;
        nxt = nxt->next;
        cur->next = prv;
    }

    *head = cur;
}

リスト ノードが次のようなものであると仮定します。

typedef struct node
{
    ..data..
    struct node *next;
} node;

適切に管理されている場合は、次のように呼び出します。

node *head = NULL;

...fill the list...

reverse_list(&head);
于 2012-11-02T19:41:30.487 に答える
0

と呼ばれるリストを考えてみlstましょう。これにより、前方に後方に移動できます。つまり、doubly linked list

lst開始ノードと終了ノードの内容を交換するだけで、リストを逆にすることができます

void reverse(lst *beg,lst *end)
{
    lst temp;
    while(beg!=end)
    {
        //swap the content of the nodes
        *temp=*beg;
        *beg=*end;
        *end=*temp;

        beg=beg->Next();//move to next node
        end=end->prev();//move to previous node
    }
}

また


その場合は、singly linked list使用できますstack

void reverse(lst* beg)
{
    stack<lst*> stc;
    lst* temp=beg;
    lst* temp1=beg;
    while(temp)//store pointers to lst nodes in stack
    {
        stc.push(temp);
        temp=temp.Next();
    }
    while(temp1)//pop the stack by inserting it into list from beginning
    {
       *temp1=*stc.top();
        temp1=temp1.Next(); 
        stc.pop();
    }
}
于 2012-11-02T17:49:30.943 に答える
0

リストをスタックのように扱い、要素をポップして新しいリストにプッシュします。

于 2012-11-02T17:46:08.053 に答える