1

我将在前言中说这是我的第一个问题。我目前正在获得信息安全硕士学位,本学期我必须学习 C++ 编程。所以这是与作业有关的。我不是在找你来回答我的作业,但我遇到了一个特殊的情况。我已经创建了使用双向链表的程序,并且一切正常。但是,当我让用户创建一个值列表时,第一个节点一直返回 0。我试图找到一些关于此的阅读,但我找不到对它的任何引用。我的问题是头节点(第一个节点)总是为零吗?还是我做错了什么。

case: 'C':
 cout<<"Please enter a list:"<<endl;
  while(n!=-999){
     myList.insert(n);
     cin>> n;}
  break;

我现在输入:12321、1234、64564、346346。结果为 0、12321、1234、64564、346346。这是应该发生的事情还是我做错了什么?另外,由于这是我的第一篇文章,请随时批评或教我如何对关键字进行颜色编码。

无论如何,这是一个家庭作业,所以我只是在寻找指导和建设性的批评。

谢谢大家

所以我无法弄清楚这个论坛上的评论部分,所以我将编辑原始帖子第一部分是构造函数代码:

template <class Type>
 doublyLinkedList<Type>::doublyLinkedList()
  {
    first= NULL;
    last = NULL;
    count = 0;
      }

然后是我的插入功能:

template <class Type>
void doublyLinkedList<Type>::insert(const Type& insertItem)
 {
nodeType<Type> *current;      //pointer to traverse the list
nodeType<Type> *trailCurrent; //pointer just before current
nodeType<Type> *newNode;      //pointer to create a node
bool found;

newNode = new nodeType<Type>; //create the node
newNode->info = insertItem;  //store the new item in the node
newNode->next = NULL;
newNode->back = NULL;

if(first == NULL) //if the list is empty, newNode is 
                  //the only node
{
   first = newNode;
   last = newNode;
   count++;
}
else
{
    found = false;
    current = first;

    while (current != NULL && !found) //search the list
        if (current->info >= insertItem)
            found = true;
        else
        {
            trailCurrent = current;
            current = current->next;
        }

    if (current == first) //insert newNode before first
    {
        first->back = newNode;
        newNode->next = first;
        first = newNode;
        count++;
    }
    else
    {
          //insert newNode between trailCurrent and current
        if (current != NULL)
        {
            trailCurrent->next = newNode;
            newNode->back = trailCurrent;
            newNode->next = current;
            current->back = newNode;
        }
        else
        {
            trailCurrent->next = newNode;
            newNode->back = trailCurrent;
            last = newNode;
        }

        count++;
      }//end else
   }//end else
}//end 

然后我也有一个初始化函数:

template <class Type>
 void doublyLinkedList<Type>::initializeList()
 {
  destroy();
}

我错过了什么吗?

4

2 回答 2

5

您先插入,然后读取输入。

于 2012-09-29T21:19:02.153 回答
1

仅根据您的代码内容,我相信 maniek 有正确的答案,所以如果/当您找到相同的答案时,请给他投票,而不是这个答案。这是为了让克雷格了解如何重新排序他的循环,以便它读取、测试、在需要时中断,否则插入。

while (cin >> n && n != 999)
    myList.insert(n);

大约有十几种编码方式,包括 for 循环、do-while 循环等,但这应该能让你运行。同样,如果它解决了您的问题,考虑对 maniek 的答案进行投票,并在其上标记绿色复选标记(以及 StackOverflow 上提供您正在寻找的答案的任何其他答案)。

于 2012-09-29T21:36:35.473 回答