C.链接列表。在另一个元素之前插入元素

时间:2014-03-21 08:04:08

标签: c linked-list

现在我有一个程序(如下所示)在(F)之后插入一个元素(E)。例如,如果我们输入n = 4然后插入4个元素2 3 3 4,然后输入我们的'F'值3和E值6,程序将会编辑在F(3)之后插入E(6)的列表,导致从2 3 3 42 3 6 3 4的列表编辑

我正在寻找一种在F之前插入值'E'的方法,而不是之后。任何人都可以解释一下这段代码可能需要做哪些更改才能实现相同的目标?

#include <stdio.h>
#include <stdlib.h>
struct sarasas { int duomuo; struct sarasas *next, *prev; };
typedef struct sarasas Sarasas;
typedef Sarasas *SarasasPtr;

int main()
{
    int d,i,n,j,e,f;
    SarasasPtr Sar,x,temp,prev=NULL;
    SarasasPtr head= NULL;
    printf("Insert 'n' \n");
    scanf("%d",&n);
    for (i=0; i<n; i++) {
        printf("Insert an element: \n");
        scanf("%d",&d);
        x=(SarasasPtr) malloc(sizeof( Sarasas ));
        x->duomuo = d;
        x->next = NULL;

        if(head == NULL) {
          head = x;
        } else {
          temp = head;
          while(temp!=NULL) {
              prev = temp;
              temp = temp->next;
          }
          prev->next = x;
        }
    }

   printf("Insert an element after which one you want another element to be inserted\n");
   scanf("%d",&e);
   printf("Insert element which you want to insert\n");
   scanf("%d",&f);

   temp = head;
   int pakeista = 0;

   while(temp!=NULL) {
     //printf("%d",temp->duomuo);
     if (temp->duomuo == e) {
       if (changed == 0) {
         x=(SarasasPtr) malloc(sizeof( Sarasas ));
         x->duomuo=f;
         x->next=temp->next;
         temp->next=x;
         n++;
         changed = 1;
       }
     }
     temp=temp->next;
   }
   Sar = head;
   for (i=0; i<n; i++) {
      printf("Sk Nr. %i: %d\n",i+1,Sar->duomuo);
      Sar = Sar->next;
   }
}

1 个答案:

答案 0 :(得分:1)

您只需检查temp->next->duomuo而不是temp->duomuo

while(temp->next!=NULL) {
    if (temp->next->duomuo == e) {
        if (changed == 0) {
            x=(SarasasPtr) malloc(sizeof( Sarasas ));
            x->duomuo=f;
            x->next=temp->next;
            temp->next=x;
            n++;
            changed = 1;
        }
    }
    temp=temp->next;
}

我还建议您不要使用此changed事件,而是在替换后从循环中断开。这样你的循环就不会运行多次。

while(temp->next!=NULL) {
    if (temp->next->duomuo == e) {
        x=(SarasasPtr) malloc(sizeof( Sarasas ));
        x->duomuo=f;
        x->next=temp->next;
        temp->next=x;
        n++;
        break;
    }
    temp=temp->next;
}