используя двойные указатели первый раз для создания и отображения связанного спискасвязанный список, используя двойные указатели
#include "stdio.h"
#include "stdlib.h"
struct node
{
int data;
struct node * next;
};
void Insert(struct node **, int , int);
void display(struct node *);
int main()
{
int c, data, position;
struct node* head;
do{
printf("Enter a choice :\n");
printf("1. Add an element.\n");
printf("2. Del an element.\n3.Display List.\n");
printf("4.Delete linked list.\n5.Exit.\n");
printf("Your Choice :");
scanf("%d",&c);
switch(c){
case 1 :
printf("\nEnter data and position :\n");
scanf("%d %d",&data,&position);
Insert(&head,data,position);
break;
case 2 :
break;
case 3 :
printf("Linked List : \n");
display(head);
break;
case 4 :
break;
case 5 :
exit(0);
default :
printf("Invalid Choice.\n");
break;
}
}while(1);
return 0;
}
void Insert(struct node **ptrhead, int item, int position){
struct node *p,*newnode;
//node creation.
newnode = (struct node *)malloc(sizeof(struct node));
if (!newnode)
{
printf("Memory Error.\n");
return;
}
newnode->next = NULL;
newnode->data = item;
p = *ptrhead;
// Creates initial node
if (!(p->data))
{
p = newnode;
}
// insertion at beginning
if (position==1)
{
newnode->next = p;
p = newnode;
free(newnode);
}
// insertionn at middle or end.
else
{
int i=1;
while(p->next!=NULL && i<position-1){
p=p->next;
i++;
}
newnode->next = p->next;
p->next = newnode;
}
*ptrhead = p;
};
// Display Linked list
void display(struct node *head){
if (head)
{
do{
printf("%d\n", head->data);
head = head->next;
}while(head->next);
}
};
Добавлю функции для удаления и других операций позже. Прямо сейчас, я просто хочу вставить и отобразить fns для работы. Но вывод идет как бесконечно работающий цикл с неправильными значениями. Я не могу понять, что не так в моем коде, пожалуйста, помогите? Спасибо заранее.
Ваше название включает в себя * двойные указатели *. Когда вы работаете над своим связанным списком, понимайте, почему 'insert' и' delete_node' требуют передать адрес списка как параметр, а не просто указатель на список. Причина, по которой в этих двух случаях требуется включить или удалить новый первый узел, который изменит адрес вашего списка. Что произойдет, если вы вставите новый первый узел, но только передаете 'node * ptrhead' в функцию' insert'? (примечание: вы можете удалить весь список, не передавая адрес списка). –