正在创建双链接列表.正在初始化前15个节点

Creating a double link list. Initializing the first 15 nodes

本文关键字:节点 初始化 15个 链接 创建 列表      更新时间:2023-10-16

我的insert方法应该将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;
}

您在开始添加节点。所以很明显,最后添加的将是第一个。如果要按添加的顺序添加节点,则需要在末尾添加节点。

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;
}