I have a reverse method that messes with the original linked list inputted; however usually this is fixable by just reversing.
my problem is after i reverse it, how do i recover the original linked list?
Code:
//compares p and q; if p is smaller, then return -1; if q is smaller, return 1
//return 0 if its exactly the same
int compare(struct integer* p, struct integer* q) {
int count=1, count2=1;
struct integer *ptest=p, *qtest=q;
while(ptest->next!=NULL) {
ptest=ptest->next;
count++;
}
printf("count p= %d\n",count);
while(qtest->next!=NULL) {
qtest=qtest->next;
count2++;
}
//PTEST AND QTEST ARE CURRENTLY POINTING TO LAST DIGIT OF P AND Q
printf("count q= %d\n",count2);
if(count<count2) {
printf("p is less than q; returning -1\n");
return -1;
}
else if(count>count2) {
printf("q is less than p; returning 1\n");
return 1;
}
else {
printf("p=%d and q are equal length; no return yet\n",ptest->digit);
if(ptest->digit<qtest->digit) {
printf("returning -1\n");
return -1;
}
else if(ptest->digit>qtest->digit) {
printf("returning 1\n");
return 1;
}
else {
}
return 0;
}
}
}
//---------------PART OF ANOTHER FUNCTION; SEGMENT
p=reverse(p);
q=reverse(q);
printf("\nRevp: ");
print(p);
printf("-Revq: ");
print(q);
printf("\n");
while(p!=NULL && q!=NULL) {
if(p->digit<q->digit) {
printf("first else\n");
p=reverse(p);
q=reverse(q);
free(ptest);
free(qtest);
return -1;
}
else if(p->digit>q->digit) {
printf("second else\n");
p=reverse(p);
q=reverse(q);
free(qtest);
free(ptest);
return 1;
}
p=p->next;
q=q->next;
}
return 0;