繁体   English   中英

追加节点双链表

[英]Appending Node Doubly Linked List

我正在尝试将节点的追加到新列表。 该程序在while循环中崩溃。

void DLL:append(string ss, string name, int & count){
  Node *temp;
  Node *newNode = new Node();
  newNode->ssn = ss;
  newNode->name = name;
  newNode->next = NULL;
  newNode->prev = NULL;
  temp = headPtr;

  if(headPtr == NULL){
   headPtr = newNode;
   count++;
  }else{
   while(temp->next != NULL){
    temp = temp->next;
   }
   newNode->prev = temp;
   newNode->next = NULL;
   temp->next = newNode;
   count++;
  }
 }
}

我也尝试过使用它代替while循环,但是结果相同:

while(temp != NULL){
 ...
 temp = temp->next
}

任何帮助将不胜感激!

编辑:将上面的第二种情况更改为

while(temp->next != NULL){
 ...
 temp = temp->next;
}

它遍历了整个过程,然后显示了其他语言的字符以及符号等,然后依次显示了我表面上的每个文件夹,直到它最终崩溃:c

您当前循环直到temp为NULL。 当达到此目标时,可以通过执行temp->next取消引用它。 那是UB,这是程序崩溃的原因。

如下更改while循环,以便在您到达最后一个元素(即,下一个元素为NULL)时停止:

while(temp->next != NULL){
    temp = temp->next
}

请注意,由于有if子句,因此在循环开始时temp没有为NULL的风险。

无关的评论:建议您在编写C ++代码时养成使用nullptr而不是NULL的习惯

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM