s****A 发帖数: 80 | 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;
} |
l*****a 发帖数: 14598 | 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; : }
|
s****A 发帖数: 80 | 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?
|
s****A 发帖数: 80 | 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?
|
p****e 发帖数: 3548 | |
c********t 发帖数: 5706 | 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
|
s****A 发帖数: 80 | 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; : }
|
c********t 发帖数: 5706 | 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啊
|
M********n 发帖数: 34 | 9 既然是double linked circular,
走两格,判断前后node是不是, 判断是不是tail,
会不会省点? |