链表在c++中从最后到第一显示

linked-list display last to first in c++

本文关键字:显示 最后 c++ 链表      更新时间:2023-10-16

今天好。。。我想制作一个链表,用c++从最后到第一显示列表如ii加29->36->15->1我想成为1->15->36->29这样我做了通常的一个

void DisplayNormal()
    {
        linkedlist *temp;
        temp = head;
        while (temp->next != NULL)
        {
            cout << "list Number : " << temp->ListNum << endl;
            cout << "Student Ceel Phone  : " << temp->number << endl;
            cout << "-------------------------------" << endl;
            temp = temp->next;
        }
        if (temp->next == NULL)
        {
            cout << "list Number : " << temp->ListNum << endl;
            cout << "Student Ceel Phone  : " << temp->number << endl;
            cout << "-------------------------------" << endl;
        }
    }

理解你的问题有点困难。您的意思是,如果数据在链表中是29->36->15->1,则将其显示为1->15->36->29,或者如果数据按规则顺序给定29、36、15、1,您想使链表1->15->36->29吗?

我想你想要第一个。所以我建议使用递归函数。

typedef struct linkedlist linkedlist;
struct linkedlist{
    int data;
    struct linkedlist* next;
};
void displayReversed(linkedlist* current ) {
  if( current == NULL ) return;
  displayReversed(current->next);
  cout << current->data << endl;
}

我认为,最好的方法是在之前和显示之后反向链表,因为我们改变了原始链表的方向,而不是它的副本。您可以在O(n)中反向链表,显示O(n)中的所有元素,这就是为什么算法的最终时间复杂度是O(n。

class Node
{
    Node *next;
    int val;
};

有了我的这个链表表示,你可以这样做:

Node* reverseLinkedList(Node *head)
{
    Node *prev = NULL;
    Node *current = head;
    Node *next;
    while (current) {
        next = current->next;
        current->next = prev;
        prev = current;
        current = next; 
    }
    head = prev;
}

你的完整功能是:

void DisplayReversed(Node *head)
{
    reverseLinkedList(head);
    displayNormal(*head);
    reverseLinkedList(head);
}