1

Тема: Зв'язний список. Ніяк не можу розібратись, що не так

Потрібно розробити програму, яка створює список  , елементами якого є цілі числа Вставляє у список перед кожним входженням елемента 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");
    }

2

Re: Зв'язний список. Ніяк не можу розібратись, що не так

1. Вирівняйте код, поважайте тих, хто його читає.
2. Раджу створити окремі функції для створення елементу, вставлення, виведення, переходу на наступний елемент і т.д. В такій маленькій програмі це не дуже покращить ситуацію, але принаймні основний код стане чистішим і зрозумілішим.

Подякували: leofun011