Member 13275409 Ответов: 1

Как сделать вставку в linkedlist?


<pre>
#include<stdio.h>
#include<stdlib.h>

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

struct node *createNode(){
    struct node *ptr,*head;
    ptr= (struct node *)malloc(sizeof(struct node));
    ptr->next = NULL;
}

struct node *input(){
    int num;
    struct node *p,*head,*temp;
    for(int i=0;i<5;i++){
		scanf("%d",&num);
        temp=createNode();
        temp->data=num;
    
    if(head == NULL){
        p=head=temp;
    }
    
    else{
        p=temp;
     }
    }
    return head;
}

struct node *insertNode(int value){
    struct node *p,*head,*neww;
    neww = createNode();
    neww ->data=value;
    
    if(head==NULL){
        head = neww;
    }
    else{
        while(p!=NULL){
            p->next=p;
            p = neww;
        }
    }
}

void display(struct node * head){
  struct node * ptr=head;
  while(ptr!=NULL){
    printf("%d ",ptr->data);
    ptr=ptr->next;
  }
}

void main(){
     struct node * head = input();
     insertNode(3);
     display(head);
}


Что я уже пробовал:

Я написал этот код ,что в этом плохого?

1 Ответов

Рейтинг:
4

Jochen Arndt

В этом есть много плохого.

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

Основная проблема с вашим кодом заключается в том, что вы должны понимать, что head переменная требуется почти для всех операций и не изменяется после ее инициализации. Таким образом, это должна быть глобальная переменная или локальный экземпляр, который должен быть передан каждой функции после ее создания. Вы сделали это для своего display() функция, но не для других.

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