Redian新闻
>
帮忙看一段小程序有没问题,谢谢
avatar
帮忙看一段小程序有没问题,谢谢# JobHunting - 待字闺中
s*A
1
search for a node in a doubly linked circular list
假设只有一个match
node * llist::search(int val){
node *t=head, *p=NULL;
while(t)
{
if (t->data==val) {p=t; break;}
else if(t==head->prev) break;
else t=t->next;
}
return p;
}
avatar
l*a
2
1)why use p? i assume p is t...
2)how do u initialize head?
3)since u mentioned that there is only one match, this may not be an issue
but is it possible that head is null?

【在 s****A 的大作中提到】
: search for a node in a doubly linked circular list
: 假设只有一个match
: node * llist::search(int val){
: node *t=head, *p=NULL;
: while(t)
: {
: if (t->data==val) {p=t; break;}
: else if(t==head->prev) break;
: else t=t->next;
: }

avatar
s*A
3
initialize head的constructor
llist::llist(int d){
head=new node(NULL, NULL, d);
head->prev=head;
head->next=head;
}
node的定义
struct node{
node *prev, *next;
int data;
node(node *a, node *b, int d):prev(a),next(b),data(d){
if(prev) prev->next=this;
if(next) next->prev=this;
};
请指点

【在 l*****a 的大作中提到】
: 1)why use p? i assume p is t...
: 2)how do u initialize head?
: 3)since u mentioned that there is only one match, this may not be an issue
: but is it possible that head is null?

avatar
s*A
4
使用p是希望在没有找到match的时候return NULL

【在 l*****a 的大作中提到】
: 1)why use p? i assume p is t...
: 2)how do u initialize head?
: 3)since u mentioned that there is only one match, this may not be an issue
: but is it possible that head is null?

avatar
p*e
5
这个死循环吧
avatar
c*t
6
不懂c++,帮你瞎改一下
node * llist::search(int val, node * head){
node *t=head;
while(t!=head->prev)
{
if (t->data==val) return t;
t=t->next;
}
return NULL;
}

【在 s****A 的大作中提到】
: 使用p是希望在没有找到match的时候return NULL
avatar
s*A
7
谢谢,不过这段code是不是有点问题
如果match正好发生在head->prev这个node这里
你的code仍然会返回NULL啊

【在 c********t 的大作中提到】
: 不懂c++,帮你瞎改一下
: node * llist::search(int val, node * head){
: node *t=head;
: while(t!=head->prev)
: {
: if (t->data==val) return t;
: t=t->next;
: }
: return NULL;
: }

avatar
c*t
8
你说的很对,改了。
node * llist::search(int val, node * head){
if(!head) return NULL;
node *t=head;
do
{
if (t->data==val) return t;
t=t->next;
}while(t!=head->prev);
return NULL;
}

【在 s****A 的大作中提到】
: 谢谢,不过这段code是不是有点问题
: 如果match正好发生在head->prev这个node这里
: 你的code仍然会返回NULL啊

avatar
M*n
9
既然是double linked circular,
走两格,判断前后node是不是, 判断是不是tail,
会不会省点?
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。