Поместить элемент в конец односвязного списка

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


typedef struct node{
    int a;
    //struct node *left;
    struct node *right;
} Node;
/*
Node *AddElem(Node **Root, int i){
    Node *Body;
    Body = malloc(sizeof(Node));
    Body->a = i;
    Body->right = *Root;   
    *Root = Body;
    return Body;
} */
void AddElemBack(Node **Root, int i){
    Node *Body;
    Node *Curr = *Root;
    if(Root){
        Body = malloc(sizeof(Node));
        Body->a = i;
        Body->right = NULL;
    }
    while(Curr->right != NULL){
        Curr = Curr->right;
    }
        Curr->right = Body;
}

void Print(Node *Root) {
    Node *p = Root;
    while(p != NULL){
        p = p->right;
        printf("N->%d\n", p->a);
    }
}

void Del(Node *Root) {
    Node *p = Root;
    while(p){
        p = p->right;
        free(p);
    }
}

int main(){
    Node *Root = NULL;
    int *b = malloc(10*sizeof(int));
    for(int i = 0; i < 10; i++){
        b[i] = rand();
        //AddElem(&Root, b[i]);
        AddElemBack(&Root, b[i]);
        //printf("rand->%d\n", b[i]);
    }
    Print(Root);
    Del(Root);
    return 0;
}

Здравствуйте, помогите пожалуйста. Как добавить элемент в конец связного списка.


Ответы (1 шт):

Автор решения: JohnDoe
#include <stdio.h>
#include <stdlib.h>


typedef struct node{
    int a;
    //struct node *left;
    struct node *right;
} Node;
/*
Node *AddElem(Node **Root, int i){
    Node *Body;
    Body = malloc(sizeof(Node));
    Body->a = i;
    Body->right = *Root;   
    *Root = Body;
    return Body;
} */
void AddElemBack(Node *Root, const int i){
    Node *Body;
    Node *Curr = *Root;
    if(Root){
        Body = malloc(sizeof(Node));
        Body->a = i;
        Body->right = NULL;
    }
    while(Curr->right != NULL){
        Curr = Curr->right;
    }
    Curr->right = Body;
}

void Print(Node *Root) {
    Node *p = Root;
    while(p != NULL){
        printf("N->%d\n", p->a);
        p = p->right;   // иначе печатать будешь начиная со второго элемента
    }
}

void Del(Node *Root) {
    Node *p = Root;
    while(p){
        Node *tmpN = p->right;
        free(p);
        p = tmpN;
    }
}

int main(){
    srand ( time(NULL) );   // инициализация функции rand значением функции time

    Node *Root  = (Node *) malloc(sizeof(Node));
    Root->right = NULL;     // никуда не ссылаемся
    int *b = malloc(10*sizeof(int));
    for(int i = 0; i < 10; i++){
        b[i] = rand();
        //AddElem(&Root, b[i]);
        AddElemBack(Root, b[i]);
        //printf("rand->%d\n", b[i]);
    }
    Print(Root);
    Del(Root);
    delete b;
    return 0;
}
→ Ссылка