Поместить элемент в конец односвязного списка
#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;
}