Реверсивный круговой связанный список. Проблема: ошибка сегментации - PullRequest
0 голосов
/ 28 января 2020

В обратной функции выдается ошибка ошибки сегментации. Функция реверса вызывается после первого дисплея (голова), а второй дисплей (голова) не может быть запущен из-за ошибки. Пожалуйста, проверьте мой выделенный текст обратный код (). Я использовал двойной указатель.

#include<iostream>
using namespace std;
typedef struct node{
    int data;
    struct node *next;
}node;
void reverse(node **head);
node* create_list(int n);
void display(node *head);
int main(){
    cout<<"Enter the frequency of nodes: ";
    int n{0};
    cin>>n;
    node *head=create_list(n);
    display(head);
    reverse(&head);//Segmentation Fault !
    display(head);
return 0;

}

node* create_list(int n){
    node *head=NULL;
    node *p=NULL;
    node *temp=NULL;
    for(int i{0};i<n;i++){
        temp=(node*)malloc(sizeof(node));
        cin>>temp->data;
        cout<<endl;
        temp->next=NULL;
        if(head==NULL){
            head=temp;
        }
        else{
            p=head;
            while(p->next!=NULL){
                p=p->next;
            }
            p->next=temp;
        }
    }
    return head;
}
void display(node *head){
    node *p=head;
    while(p!=NULL){
        cout<<p->data<<"\t";
        p=p->next;
    }
}
void reverse(node **head){//Code where segmentation fault occured is due to this function
    node *p=NULL;
    node *current=*head;
    node *temp=current->next;
    while(temp->next!=*head){
        p=temp->next;
        temp->next=current;
        current=temp;
        temp=p;
    }   
}

1 Ответ

0 голосов
/ 29 января 2020

Перевернутый круговой связанный список.

Ваша проблема в том, что create_list на самом деле не создает круговой список, он создает "обычный" связанный список. Кроме того, display предполагает, что список не является круглым (и если бы он был go в бесконечном l oop).

Но ваша функция reverse предполагает, что список является круглым, и будет выполнить до конца списка и cra sh.

научиться использовать отладчик и как отлаживать небольшие программы .

...