【发布时间】:2013-11-18 19:27:17
【问题描述】:
所以我有一个半工作的链表程序。我只是在使用某些方法时遇到了一些问题......我记录的那些 bekiw 正在工作,除了 delete from end 这表现得很奇怪。
我在 Mavericks 上使用 NetBeans,G++ 作为我的编译器和 C++11 Here is a zip of all of the program files
以下是我正在尝试的方法列表:
//working
int size() const;
/kind of
void addToStart(Node *);
//working
void addToEnd(Node *);
//working
void printList();
//working
bool removeFromStart();
//kind of working
bool removeFromEnd();
//Still working on these
void removeNodeFromList(int);
void removeNodeFromList(string);
现在,我必须运行 removeFromEnd() 两次才能使其工作。意思是,我在程序开始时运行它一次,它什么也不做,但随后的每一次,它实际上都会删除。
对于 addToStart(),如果我只运行一次它就可以工作。即:
- 我可以在程序开始时运行一次并打印出列表
- 我可以在使用 addToEnd 后运行一次,但如果我再次尝试并尝试打印列表,它只会不断吐出我尝试添加的值。
addToEnd() 如果我继续运行它,它可以完美地找到,但如果我:
首先使用 addToEnd() 添加项目,然后使用 addToStart() 一次,然后尝试再次使用 addToEnd()。当我打印出列表时,它只打印出两个对象,每个对象都是我尝试插入的最后一个值的副本。
void LinkedList::addToEnd(Node* ne)
{
Node** q = &myHead;
while (*q)
{
q = &(*q)->next;
}
*q = new Node(ne->itemName, ne->itemNo);
}
void LinkedList::printList()
{
Node* p = myHead;
while (p != NULL)
{
cout << p->itemNo << " " << p->itemName;
cout << endl;
p = p->next;
}
cout << endl << endl;
}
bool LinkedList::removeFromStart()
{
if (myHead == NULL)
{
cout << "List is already empty";
}
else
{
myHead = myHead->next;
}
}
bool LinkedList::removeFromEnd()
{
if (myHead == NULL)
return false;
//Empty the list if there's only one element
if (myHead->next == NULL)
{
delete myHead;
myHead = NULL;
myTail = NULL;
return true;
}
// Find the last item in the list
Node *temp = myHead;
while (temp->next != myTail)
{
temp = temp->next;
}
delete myTail;
temp->next = NULL;
myTail = temp;
return true;
}
另外,仍在尝试找出删除的内容
void LinkedList::removeNodeFromList(int i) {
//Save the values
Node* p = myHead;
Node* temp = myHead->next;
while (p) {
if (p->itemNo == i) {
p=temp;
} else {
p = p->next;
}
}
}
【问题讨论】:
-
请更正您的格式并给出一个显示错误行为的示例程序
-
修复了格式。为了在不添加所有内容的情况下保持问题简短,我链接到一个包含我所有代码的 zip。
-
您能否将范围缩小到 一个 您遇到的问题?我数了五个,你甚至都懒得准备minimal complete example。
标签: c++ pointers reference linked-list