Вставка узла в конец связанного списка в C ++ - PullRequest
0 голосов
/ 16 июня 2020

Я написал этот код, чтобы вставить узел в конец односвязного списка. Он компилируется без ошибок, но после выполнения не выводится. Где я ошибся?

void insert_n(int x){
node* temp1 = new node();
temp1->data=x;
temp1->next=NULL;
node* temp2 = head;
while(temp2->next!=NULL){
    temp2 = temp2->next;
}
temp2->next=temp1;
}

void print(){
node* temp = head;
while(temp!=NULL){
    cout<<temp->data<<" ";
    temp = temp->next;
}
}

int main()
{
    head = NULL;
    insert_n(2);
    insert_n(3);
    insert_n(4);
    insert_n(5);
    print();
    return 0;
}

Не получается, потому что должен быть особый случай, когда список пуст?

Ответы [ 3 ]

1 голос
/ 16 июня 2020

Да, ты прав. Если head == NULL, ваша функция вставки не работает. Ниже приводится исправление вашего insert_n() function:

void insert_n(int x) {
  node* temp1 = new node();
  temp1->data = x;
  temp1->next = NULL;
  if (head == NULL) {
    head = temp1;
  } else {
    node* temp2 = head;
    while (temp2->next != NULL) {
      temp2 = temp2->next;
    }
    temp2->next = temp1;
  }
}

Вот пример кода: C Программа для поиска и вставки в односвязный список

1 голос
/ 16 июня 2020

Ваш head никогда не устанавливается на какое-либо определенное значение, поэтому он терпит неудачу в:

node* temp2 = head;
while(temp2->next!=NULL){

, потому что head это NULL, и поэтому temp2 также NULL, что приводит к в случае ошибки сегментации, когда он пытается получить доступ к next.

0 голосов
/ 16 июня 2020

Попробуйте следующее:

#include <iostream>

using namespace std; // this was missing !!!

struct node {
    int data;
    struct node* next;
};

struct node *head;

void insert_n(int x) {
    node* temp1 = new node();
    temp1->data = x;
    temp1->next = NULL;
    node* temp2 = head;
    while (temp2->next != NULL) {
        temp2 = temp2->next;
    }
    temp2->next = temp1;
}

void print() {
    node* temp = head;
    while (temp != NULL) {
        cout << temp->data << " ";
        temp = temp->next;
    }
}

int main()
{
    head = new node(); // without this you get a crash !!!
    insert_n(2);
    insert_n(3);
    insert_n(4);
    insert_n(5);
    print();
    return 0;
}
...