链表清单显示在c ++中的第一个

时间:2016-01-05 00:16:55

标签: c++ linked-list display

美好的一天......我想创建一个链表来显示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;
        }

    }

2 个答案:

答案 0 :(得分:3)

有点难以理解你的问题。 您的意思是,如果数据在链表中是29-> 36-> 15-> 1,那么将其显示为1-> 15-> 36-> 29或者如果数据被给予29,36,15,1 in in常规序列,您想要制作链表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;
}

答案 1 :(得分:0)

我认为,最好的方法是在之前反转链接列表,在之后反转,因为我们更改原始的方向链表,它的复制。您可以在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);
}