Untitled
unknown
plain_text
2 years ago
1.7 kB
4
Indexable
Doubly Linked List #include <stdio.h> #include<stdlib.h> struct Node { struct Node *prev; int data; struct Node *next; }*first=NULL; void create(int A[],int n) { struct Node *t,*last; int i; first=(struct Node *)malloc(sizeof(struct Node)); first->data=A[0]; first->prev=first->next=NULL; last=first; for(i=1;i<n;i++) { t=(struct Node *)malloc(sizeof(struct Node)); t->data=A[i]; t->next=last->next; t->prev=last; last->next=t; last=t; } } void Display(struct Node *p) { while(p) { printf("%d ",p->data); p=p->next; } printf("\n"); } int Length(struct Node *p) { int len=0; while(p) { len++; p=p->next; } return len; } void Insert(struct Node *p,int index,int x) { struct Node *t; int i; if(index < 0 || index > Length(p)) return; if(index==0) { t=(struct Node *)malloc(sizeof(struct Node)); t->data=x; t->prev=NULL; t->next=first; first->prev=t; first=t; } else { for(i=0;i<index-1;i++) p=p->next; t=(struct Node *)malloc(sizeof(struct Node)); t->data=x; t->prev=p; t->next=p->next; if(p->next)p->next->prev=t; p->next=t; } } int Delete(struct Node *p,int index) { //struct Node *q; int x=-1,i; if(index < 1 || index > Length(p)) return -1; if(index==1) { first=first->next; if(first)first->prev=NULL; x=p->data; free(p); } else { for(i=0;i<index-1;i++) p=p->next; p->prev->next=p->next; if(p->next) p->next->prev=p->prev; x=p->data; free(p); } return x; } void Reverse(struct Node *p) { struct Node *temp; while(p!=NULL) { temp=p->next; p->next=p->prev; p->prev=temp; p=p->prev; if(p!=NULL && p->next==NULL) first=p; } } int main() { int A[]={10,20,30,40,50}; create(A,5); Reverse(first); Display(first); return 0; }
Editor is loading...