traverse pointer from last node to first

匿名 (未验证) 提交于 2019-12-03 01:46:01

问题:

bn_ptr drive_temp(bn_ptr head,bn_ptr temp,bn_ptr current) {      while(temp->next!=current)     {         temp=temp->next;         current=temp;     }     temp=head;      return current;  } 

I have linked list and 'head' pointer hold first node , 'current' pointer hold last node,I want to bring 'current' to head one by one ,so I write this function but it gives segmentation fault when I debug the program

回答1:

temp->next!=current will never be true unless temp==temp->next.

Try this:

bn_ptr drive_temp(bn_ptr head,bn_ptr temp,bn_ptr current) {      while(temp->next!=current)     {         temp=temp->next;     }     current=temp; /* get this out of the loop */     temp=head;      return current;  } 

or more simplified this:

bn_ptr drive_temp(bn_ptr head,bn_ptr temp,bn_ptr current) {     (void)head; /* head isn't used, so put this to avoid warning */     while(temp->next!=current)     {         temp=temp->next;     }     /* current and temp will be lost, so assigning to them here is useless */      return temp;  } 

To make it safer, make sure that temp isn't NULL to avoid runtime error in case of current is invalid.

bn_ptr drive_temp(bn_ptr head,bn_ptr temp,bn_ptr current) {     (void)head; /* head isn't used, so put this to avoid warning */     while(temp != NULL && temp->next!=current)     {         temp=temp->next;     }      /* temp will be the previous node of current or NULL */     return temp;  } 

Maybe you want this:

bn_ptr drive_temp(bn_ptr head,bn_ptr current) /* remove temp from the arguments */ {     bn_ptr temp = head;     while(temp != NULL && temp->next!=current)     {         temp=temp->next;     }      /* temp will be the previous node of current or NULL */     return temp;  } 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!