【问题标题】:Creating a double link list. Initializing the first 15 nodes创建一个双向链表。初始化前 15 个节点
【发布时间】:2013-02-19 03:01:46
【问题描述】:

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

【问题讨论】:

    标签: c++


    【解决方案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;
    
    }
    

    【讨论】:

      猜你喜欢
      • 2021-05-25
      • 1970-01-01
      • 2014-12-13
      • 1970-01-01
      • 2015-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      相关资源
      最近更新 更多