list - LinkedList Delete End in C -


i trying program simple text editor in c , using linkedlist. have problems deleteend function. did go wrong?

#include <stdio.h> #include <stdlib.h> #include<conio.h> 

i store character, , coordinates of character in structure this:

struct node {     struct node *previous;     char c;     int x;     int y;     struct node *next; }*head; 

this called whenever letter typed in.

void characters(char typed, int xpos, int ypos)     //assign values of node {     struct node *temp,*var,*temp2;     temp=(struct node *)malloc(sizeof(struct node));     temp->c=typed;     temp->x=xpos;     temp->y=ypos;      if(head==null)     {         head=temp;         head->next=null;     }      else     {         temp2=head;         while(temp2!=null)         {             var=temp2;             temp2=temp2->next;         }         temp2=temp;         var->next=temp2;         temp2->next=null;     } } 

print new node if there changes.

void printer()          //to print {     struct node *temp;     temp=head;     while(temp!=null)     {         gotoxy(temp->x,temp->y);         printf("%c",temp->c);         temp=temp->next;     }  } 

now here, not know why last element of head won't deleted.

void deletesend() {     struct node *temp,*last;     temp=head;     while(temp!=null)     {         last=temp;         temp=temp->next;     }     if(last->previous== null)     {         free(temp);         head=null;     }     last=null;     temp->previous=last;     free(temp); } 

this begins.

main() {     char c;         //for storing character     int x,y;        //for position of character     clrscr();     for(;;)     {         c=getch();         x=wherex();         y=wherey();         if(c==0x1b)     //escape exit         {             exit(0);         }          else if (c==8)  //for backspace         {             deletesend();             // clrscr();             printer();         }          else            //normal characters         {             characters(c,x,y);             printer();         }       } } 

try :

void deletesend() { struct node *temp,*last; temp=head; last = temp; while(temp != null && temp->next!=null) {     last=temp;     temp=temp->next; } if(last == temp) {     free(temp);     head=null; } else {     free(last->next);     last->next = null; } 

in algorithm, try work null pointer, can't previous node think.


Comments

Popular posts from this blog

basic authentication with http post params android -

vb.net - Virtual Keyboard commands -

css - Firefox for ubuntu renders wrong colors -