├── README.md └── link /README.md: -------------------------------------------------------------------------------- 1 | # doubly-linked-list 2 | This C program implements a doubly linked list with functions to insert nodes at the end (`insert`), at the beginning (`insertbeg`), after a given node (`insertafter`), before a given node (`insertbefore`), and at a specific position (`insertpos`). It also includes a `display` function to print the list. 3 | -------------------------------------------------------------------------------- /link: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | struct Node{ 4 | int data; 5 | struct Node *next; 6 | struct Node *prev; 7 | }; 8 | typedef struct Node node; 9 | node *head=NULL; 10 | void insert(int d){ 11 | node*newnode=(node *)malloc(sizeof(node)); 12 | newnode->prev=NULL; 13 | newnode->data=d; 14 | newnode->next=NULL; 15 | if(head==NULL){ 16 | head=newnode; 17 | } 18 | else{ 19 | node*temp=head; 20 | while(temp->next!=NULL){ 21 | temp=temp->next; 22 | } 23 | temp->next=newnode; 24 | newnode->prev=temp; 25 | } 26 | } 27 | void insertbeg(int d){ 28 | node *newnode=(node*)malloc(sizeof(node)); 29 | newnode->data=d; 30 | newnode->next=head; 31 | head->prev=newnode; 32 | newnode->prev=NULL; 33 | head=newnode; 34 | } 35 | void insertafter(int x,int d){ 36 | node* newnode=(node*)malloc(sizeof(node)); 37 | newnode->data=d; 38 | newnode->next=NULL; 39 | newnode->prev=NULL; 40 | if(head==NULL){ 41 | printf("\n Empty"); 42 | return;} 43 | node *temp=head; 44 | while(temp->data!=x){ 45 | temp=temp->next; 46 | } 47 | newnode->next=temp->next; 48 | temp->next->prev=newnode; 49 | temp->next=newnode; 50 | newnode->prev=temp; 51 | } 52 | void insertbefore(int x,int d){ 53 | node *newnode=(node*)malloc(sizeof(node)); 54 | newnode->data=d; 55 | newnode->next=NULL; 56 | newnode->prev=NULL; 57 | 58 | if(head==NULL){ 59 | printf("\n Empty"); 60 | } 61 | else{ 62 | node*temp=head; 63 | node*prev=NULL; 64 | while(temp->data!=x){ 65 | prev=temp; 66 | temp=temp->next; 67 | } 68 | newnode->next=temp; 69 | prev->next=newnode; 70 | newnode->prev=prev; 71 | temp->prev=newnode; 72 | } 73 | } 74 | void insertpos(int p,int d){ 75 | node*newnode=(node*)malloc(sizeof(node)); 76 | newnode->data=d; 77 | newnode->next=NULL; 78 | newnode->prev=NULL; 79 | int current=0; 80 | if(head==NULL){ 81 | printf("\n Empty"); 82 | } 83 | else{ 84 | node*temp=head; 85 | node*prev=NULL; 86 | if(p==0){ 87 | insertbeg(d); 88 | return;} 89 | while(temp!=NULL && current!= p) { 90 | prev = temp; 91 | temp = temp->next; 92 | current++; 93 | } 94 | 95 | newnode->prev = prev; 96 | newnode->next = temp; 97 | temp->prev = newnode; 98 | prev->next = newnode; 99 | } 100 | } 101 | void display(){ 102 | node *temp=head; 103 | while(temp!=NULL){ 104 | printf("%d->",temp->data); 105 | temp=temp->next; 106 | } 107 | printf("NULL"); 108 | } 109 | int main() { 110 | insert(1); 111 | insert(2); 112 | insertbeg(3); 113 | insertafter(1,4); 114 | insertbefore(4,5); 115 | insertpos(2,6); 116 | display(); 117 | return 0; 118 | } 119 | --------------------------------------------------------------------------------