我的插入方法应该有P作为第一个值(0),15是链接列表的最后一个值。虽然,当我打印出我的清单时,我必须通过p-> succ而不是p-prev来打印出这些项目,并打印出15,14,13 ....这是正确的吗?或者我执行我的功能错了吗?
class Node{
public:
int value;
Node *succ;
Node *prev;
Node(int val, Node *s=NULL, Node *p=NULL)
:value(val),succ(s),prev(p){}
Node *insert(Node *p,Node *n)
{
if(n==NULL)
return p;
if(p==NULL)
return n;
n->succ=p;
if(p->prev)
p->prev->succ=n;
n->prev=p->prev;
p->prev=n;
return n;
}
int main(int argc, char *argv[]) {
Node *p= NULL;
for(int i = 0; i<=15; i++){
p = insert(p, new Node(i));
}
while(p){
cout<<p->value;
head=p->succ;
}
答案 0 :(得分:1)
您正在开始添加节点。所以显然最后添加的将是第一个。如果您希望按照添加的顺序添加节点,则需要在末尾添加节点。
Node *insert(Node *p,Node *n)
{
Node * ptr;
if(n==NULL)
return p;
if(p==NULL)
return n;
ptr = p;
// Traverse to the end of the list
while(ptr->succ)
{
ptr = ptr->succ;
}
ptr->succ = n;
n->prev = ptr;
return p;
}