//////////////////////list.h/////////////////////////////
#ifndef _LIST_H_
#define _LIST_H_
class ListNode {
private:
int myValue;
ListNode* myNext;
public:
ListNode (int k):myValue(k), myNext(0) {}
ListNode (int k, ListNode* ptr):myValue(k), myNext(ptr) {}
~ListNode ();
int First () {return myValue;}
ListNode* Reset () {return myNext;}
void Print (){};
};
#endif
////////////////////////////list.cpp///////////////////////
ListNode::~ListNode () {
ListNode* temp = 0;
cout << "Delete node of value " << myValue << endl;
ListNode* ptr = this;
while (ptr) {
temp = ptr->myNext;
delete ptr;
ptr = temp;
}
}
//////////////////////////////main().cpp/////////////////
#include <iostream>
#include "List.h"
using namespace std;
ListNode* FromInput (istream &is) {
ListNode* head = 0;
int k;
while (is >> k) {
head = new ListNode (k, head);
}
return head;
}
int main () {
ListNode* list = FromInput (cin);
list->Print();
if (list) {
delete list;
}
return 0;
}
小弟输入3,4,5就陷入死循环不停输出Delete node of value 5,小弟真心没找到问题所在,请高人指点。谢谢
------解决方案--------------------------------------------------------
ListNode* ptr = head;才行,你的链表没有头指针吧。
------解决方案--------------------------------------------------------
头指针没问题。问题是这里:
while (ptr) {
temp = ptr->myNext;
delete ptr;
ptr = temp;
}
这句delete会递归调用ListNode::~ListNode
------解决方案--------------------------------------------------------
楼主,你的析构函数中循环的判断条件是ptr是否为NULL,而你的FromInput 函数中并没有将链表的最后一个节点的myNext置为NULL,所以才会死循环。
建议如下修改,我没有测试是否OK,但大致意思就是那样,楼主再看看。
//////////////////////list.h/////////////////////////////
#ifndef _LIST_H_
#define _LIST_H_
class ListNode {
private:
int myValue;
ListNode* myNext;