I have a while statement that is breaking when only one of the two conditions is true.
The while loop suppose to be breaking when the two conditions are met and not only one.


suppose hp_p= 1 ,2 ,3
hp_q= 1,2, null

when hp_p = 3 and hp_q = null it suppose to keep going, but instead it breaks. WHY?

Code:
 while((hp_p!=NULL) && (hp_q!=NULL))
    {
        current = (struct integer *) malloc (sizeof( struct integer ));
        if(hp_p!=NULL && hp_q==NULL)
          {
             d= hp_p->digit + r;
             if(d>9){d=d-10;r=1;}else{r=0;}
             hp_p = hp_p->next;
          }
        if(hp_p==NULL && hp_q!=NULL)
          {
             d= hp_q->digit + r;
             if(d>9){d=d-10;r=1;}else{r=0;}
             hp_q = hp_q->next;
          }
        if(hp_p!=NULL && hp_q!=NULL)
          {
             d= hp_p->digit + hp_q->digit + r;
             if(d>9){d=d-10;r=1;}else{r=0;}
             hp_q = hp_q->next;
             hp_p = hp_p->next;
          }
          
      current->digit = d;
      current->next = result;
      result = current;
    }