#include<stdio.h>
#include<stdlib.h>
typedef struct dlist
{
int data;
struct dlist *next, *prev;
}dlist;
dlist* insert_begin(dlist *h,int d)
{
dlist *temp = (dlist*)malloc(sizeof(dlist));
temp->data = d;
temp->next = temp->prev= NULL;
if(h==NULL)
{
h=temp;
// t=temp;
}
else
{
temp->next = h;
h->prev = temp;
h = temp;
}
return h;
}
dlist* delete_begin(dlist *h)
{
dlist *r = h;
if(r==NULL)
{
printf("empty list");
return 0;
}
else
{
dlist *ptr = r;
//ptr = r;
r=r->next;
r->prev = NULL;
free(ptr);
}
return r;
}
dlist* delete_end(dlist *h)
{
dlist *r = h;
if(r==NULL)
{
printf("empty list");
return 0;
}
else
{
while(r->next)
r=r->next;
dlist *p = r;
(r->prev)->next= NULL;
free(p);
return r;
}
//return r;
}
void display(dlist *h)
{
dlist *r = h;
// printf("%d",r->data);
//printf("ajay");
while(r)
{
printf("%d ---- >",r->data);
r=r->next;
}
}
void main()
{
dlist *d=NULL;
d = insert_begin(d,2);
d= insert_begin(d,3);
d= insert_begin(d,4);
d= insert_begin(d,5);
display(d);
d = delete_begin(d);
printf("After deletion1");
display(d);
d= delete_end(d);
printf("After deletion2");
display(d); // infinite elements are displaying on screen
}
위의 코드는 이중 링크 목록에서 요소를 삽입하고 삭제하기 위해 쓰는 코드입니다. 제 부분을 삽입하고 처음부터 노드를 삭제하면 둘 다 잘 작동합니다. delete_end() 함수에서 문제가 발생했습니다. 코드를 컴파일하고 실행하면 계속해서 화면에 인쇄됩니다. 도움이 필요하다.이중 링크 목록에서 요소 삽입 및 제거
귀하의 delete_end() 함수를 제안 할 수 있습니다. 당신은'h','r','p'를 모두 가지고 같은 것을 가리 킵니다. 'p'를 만들고 아무것도하지 않고'free()'합니다. – mhodges