c++单向链表类的问题,初学者一枚,求大家指教
落日的背后 2019-05-09 12:05:06 用devc++写的一个测试代码,寻找指定结点时,判断最后一个链表一直会出错,求大神指点。
下面是代码:
#include<iostream>
using namespace std;
#include<string.h>
class person{
private:
char name[20];
public:
person(char *str = "zhangsan"){
strcpy(name, str);
}
person(const person& obj)
{
strcpy(name, obj.name);
}
person& operator = (const person& obj)
{
strcpy(name, obj.name);
}
void setname(char *str)
{
strcpy(name, str);
}
char* getname()
{
return name;
}
};
struct Node
{
person member;
Node *next;
};
class LinkI{
private:
Node *p_head; //专用头结点指针
int SizeI;
public:
LinkI();
~LinkI();
void Insert_Node(person& obj); //尾部插入
int FindName_Node(char *targetname);
person GetData_Node(int pos);
int GetSizeI();
};
LinkI::LinkI():p_head(NULL),SizeI(0)
{
p_head = new Node;
p_head->next = NULL;
}
LinkI::~LinkI()
{
Node *temp = NULL;
Node *p = p_head->next;
while (p != NULL)
{
temp = p->next;
delete p;
p = temp;
}
delete temp;
temp = NULL;
delete p_head;
p = NULL;
SizeI = 0;
}
void LinkI::Insert_Node(person& obj) //链表尾部插入
{
Node *temp = new Node;
temp->member = obj;
temp->next = NULL;
Node * p = NULL;
p = p_head;
while (p->next != NULL)
{
p = p->next;
}
p->next = temp;
SizeI++;
temp = NULL;
p = NULL;
}
int LinkI::FindName_Node(char *targetname)
{
int pos = 1;
Node *temp = NULL;
temp = p_head->next;
while(temp != NULL)
{
if(strcmp((temp->member).getname(), targetname) == 0) //调试时这里判断会多一次循环……
{
return pos;
}
else
{
temp =temp->next;
pos += 1;
}
}
temp = NULL;
cout<<"未找到信息,可能姓名输入有误。"<<endl;
return -1;
}
person LinkI::GetData_Node(int pos)
{
int count = 0;
person data;
Node *temp = NULL;
temp = p_head;
while(count < pos)
{
temp = temp->next;
count++;
}
data = temp->member;
delete temp;
return data;
}
int LinkI::GetSizeI()
{
return SizeI;
}
int main()
{
LinkI list;
person p1;
person p2("wangwu");
person p3("zhaoliu");
list.Insert_Node(p1);
list.Insert_Node(p2);
list.Insert_Node(p3);
person p4;
p4 = list.GetData_Node(3);
cout<<list.FindName_Node("zhangsan")<<endl;
cout<<list.FindName_Node("wangwu")<<endl;
cout<<list.FindName_Node("zhaoliu")<<endl;
cout<<list.GetSizeI()<<endl;
cout<<p4.getname()<<endl;
}