перевернуть строку, используя односвязный список - PullRequest
0 голосов
/ 07 мая 2019

Я пытаюсь напечатать обратную строку, используя связанный список.Предположим, что моя строка «Мир полон хороших людей», на нем должно быть напечатано «Люди, полные добрых людей, мир»

#include <iostream>

using namespace std;
/******** Fucntions Prototype *********/

void printList();


typedef struct Node
{
    string data;
    struct Node *next;
}node;

struct Node* newNode(string userData)
{
    node *temp = new Node;
    temp->data = userData;
    temp->next = NULL;
    return temp;
}

void printList(node* head)
{
    node *temp = head;
    while(temp != NULL)
    {
        cout<<temp->data<<" ";
        temp = temp->next;
    }
}
void reverseList(node *head)
{
    node *curr = head;
    node *prev = NULL, *next = NULL;
    while(curr != NULL)
    {
        next = curr->next;
        curr->next = prev;
        prev = curr;
        curr = next;
    }
    head = prev;

}
int main()
{
    node *head = newNode("World");
    head->next = newNode("is");
    head->next->next = newNode("full");
    head->next->next->next = newNode("of");
    head->next->next->next->next = newNode("good");
    head->next->next->next->next->next = newNode("people");
    cout<<"Linked list before reverse is:\n";
    printList(head);
    cout<<"\n";
    reverseList(head);
    cout<<"Linked list after reverse is:\n";
    printList(head);

    return 0;
}

Так что, если строка «Мир полон добрых людей», ожидаемый результатэто "люди хороши от полного мира", следовательно, поменять местами узел.Но получает "Мир" в качестве выхода

Ответы [ 2 ]

2 голосов
/ 07 мая 2019

Таким образом, обращение к списку не является проблемой. Убедитесь, что вы передали head по значению. Таким образом, вы по сути вносите изменения в копию head.Пожалуйста, посмотрите на передача по значению против передачи по ссылке для получения дополнительной информации об этом.

Решение вашей проблемы состоит в том, чтобы изменить ваш прототип на void reverseList(node **head), и каждый последующий доступ к head будет отменен с помощью *head.

Наконец, вызовите вашу функцию с помощью reverseList(&head);

1 голос
/ 07 мая 2019

void reverseList(node *head) - Здесь вы обновляете временную head, которая передается по значению.

Измените объявление функции на void reverseList(node*& head)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...