Тема: Зв'язний список. Ніяк не можу розібратись, що не так
Потрібно розробити програму, яка створює список , елементами якого є цілі числа Вставляє у список перед кожним входженням елемента K елемент L . Друкує модифікований список по п’ять елементів у рядку.
В мене не виходить в перед КОЖНИМ елементом K вставити L.
#include <stdio.h>
#include <stdlib.h>
struct list
{ int data;
struct list *next;
};
int main(int argc, char *argv[])
{
int n,i, l, k, f=0;
struct list *plist,*head, *q ;
printf ("Input what: ");
scanf ("%d",&l);
printf ("Input previous? ");
scanf ("%d",&k);
printf ("Input N: ");
scanf("%d",&n);
plist=malloc(sizeof(struct list));
head=plist; // створення списку
i=1;
do
{
scanf("%d",&plist->data);
plist->next=malloc(sizeof(struct list));
plist=plist->next;
}
while (++i<n);
scanf("%d",&plist->data);
plist->next=0;
////////
plist=head; // Виведення елементів списку
while (plist!=0)
{
printf("%d ",plist->data);
plist=plist->next;
}
printf("\n");
//////
plist=head;
while(plist->next!=0){
while (plist->data!=k && plist->next!=0) plist=plist->next; //зупиняємося на елементі, який дорівнює k
if (plist->data==k)
{ q=malloc(sizeof(struct list));
*q=*plist; // або q->data=plist->data; q->next=plist->next;
plist->data=l; plist->next=q;} /*на місце нового елемента перепишемо значення елемента k
та значення вказівника на наступний за ним елемент,
а на звільнене місце ― значення нового елемента l та в його поле next значення адреси q */
plist->next=q->next;
plist=plist->next;}
////////
plist=head; // Виведення елементів списку
if (plist!=0)
do
{ for(i=0; i<5; i++){
if(plist!=0){
printf("%d ",plist->data);
plist=plist->next;
}
}
printf("\n"); i=0;
}
while (plist!=0);
printf("\n");
system("PAUSE");
}