现在我有一个程序(如下所示)在(F)之后插入一个元素(E)。例如,如果我们输入n = 4
然后插入4个元素2 3 3 4
,然后输入我们的'F'值3
和E值6
,程序将会编辑在F(3)之后插入E(6)的列表,导致从2 3 3 4
到2 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;
}
}
答案 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;
}