c - I get into a endless loop in linked list -
i want find out intersect between 2 linked list sorted,but endless loop ,i know set wrong condition after while don't know how fix that. pls me.
#include<stdio.h> #include<stdlib.h> typedef struct node { int data; struct node *next; }list; list *intersect(list *l1, list *l2) { list *result; list *l1pos, *l2pos, *resultpos; l1pos = l1; l2pos = l2; result = (list *)malloc(sizeof(list)); resultpos = result; while(l1pos != null && l2pos != null) { //endless loop if(l1pos->data < l2pos->data) { l1pos = l1pos->next; } else if(l1pos->data > l2pos->data) { l2pos = l2pos->next; } else { resultpos->data = l1pos->data; l1 = l1pos->next; l2 = l2pos->next; resultpos->next = (list *)malloc(sizeof(list)); resultpos = resultpos->next; } } return result; }
when find intersection, don't change values of l1pos
, l2pos
, loop keeps choosing final else statement forever.
if want end loop, use break or set 1 of mentioned variables null.
otherwise can set both nodes next node , let loop continue until end of list:
l1pos = l1pos->next; l2pos = l2pos->next;
also allocation of result
questionable, since node allocated before known if loop found result, return node contain uninitialized values, , final node in list result
contain uninitialized values. instead of allocating in advance, allocate when find node, , set next pointer of new node null list terminated. in case nothing found, function return result
, null (as initialized null before loop).
Comments
Post a Comment