Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- struct nodeD{
- int data;
- struct nodeD* next;
- struct nodeD* prev;
- };
- struct nodeD* makeEmpty(struct nodeD* L);
- void insertAtFirst(int data_, struct nodeD* L);
- void insertAfterPosition(int x,struct nodeD* P, struct nodeD* L);
- struct nodeD* findPrevious(int x,struct nodeD* L);
- int isLast(struct nodeD* P , struct nodeD* L);
- void delete(int x, struct nodeD* L);
- struct nodeD* find(int x, struct nodeD* L);
- void printList(struct nodeD* L);
- void reverse(struct nodeD* L);
- int main(){
- struct nodeD* head1 = NULL;
- head1 = makeEmpty(head1);
- insertAtFirst(1,head1);
- insertAtFirst(2,head1);
- insertAtFirst(3,head1);
- insertAtFirst(4,head1);
- insertAtFirst(5,head1);
- insertAtFirst(6,head1);
- printList(head1);
- reverse(head1);
- printList(head1);
- return 0;
- }
- struct nodeD* makeEmpty(struct nodeD* L){
- L = malloc(sizeof(struct nodeD));
- L->next = NULL;
- L->prev = NULL;
- return L;
- }
- void insertAtFirst(int data_, struct nodeD* L){
- struct nodeD* newNode = malloc(sizeof(struct nodeD));
- newNode->data = data_;
- newNode->next = L->next;
- newNode->prev = L;
- L->next = newNode;
- L->next->prev = newNode;
- }
- void insertAfterPosition(int x,struct nodeD* P, struct nodeD* L){
- struct nodeD* newNode = malloc(sizeof(struct nodeD));
- newNode->data = x;
- newNode->next = P->next;
- newNode->prev = P;
- P->next->prev = newNode;
- P->next = newNode;
- }
- struct nodeD* findPrevious(int x,struct nodeD* L){
- struct nodeD* p = L;
- while(p->next->data!=x && p->next!=NULL){
- p = p->next;
- }
- return p;
- }
- int isLast(struct nodeD* P , struct nodeD* L){
- return P->next == NULL ;
- }
- void delete(int x, struct nodeD* L){
- struct nodeD* p = findPrevious(x,L);
- if(!isLast(p,L)){
- struct nodeD* temp= p->next;
- temp->next->prev = p;
- p->next = temp->next;
- temp->prev = NULL;
- temp->next = NULL;
- free(temp);
- }
- }
- struct nodeD* find(int x, struct nodeD* L){
- struct nodeD* p = L;
- p = p->next;
- while(p->data!=x && p!=NULL){
- p = p->next;
- }
- return p;
- }
- void printList(struct nodeD* L){
- struct nodeD* p = L->next;
- while(p!=NULL){
- printf("%d ",p->data);
- p = p->next;
- }
- printf(" \n");
- }
- void reverse(struct nodeD* L){
- struct nodeD* curr = L->next;
- struct nodeD* prev = NULL;
- struct nodeD* nxt = curr->next;
- while(curr!=NULL){
- curr->next = prev;
- curr->prev = nxt;
- prev = curr;
- curr = nxt;
- if(nxt!=NULL)
- nxt = nxt->next;
- }
- L->next = prev;
- prev->prev = L;
- printList(L);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement