1、编写类string的构造函数,析构函数和赋值函数。
类:
class String
{
public:
String(const char *str=NULL);//普通构造函数
String(const String &other);//拷贝构造函数
~String(void);//析构函数
String &operator = (const String &other); //赋值构造函数
private:
char *m_data;//用于保存字符串
};
普通构造函数:
String ::String(const char *str)
{
if(str==NULL)
{
m_data = new char[1];
*m_data = '\0';
}else{
int length =strlen(str);
m_data = new char[length+1];//若能加NULL更好
strcpy(m_data,str);
}
}
析构函数
String::String(void)
{
delete[] m_data; //或者delete m_data;
}
拷贝构造函数
String::String(const String &other)
{
int length = strlen(other.m_data);
m_data = new char[length+1];
//加分点,对m_data加NULL判断,即while(m_data!=NULL)
strcpy(m_data, other.m_data);
}
赋值函数
String &String::operator=(const String &other)
{
if(this==&other)//得分点,查找自赋值
return *this;
delete []m_data;//得分点,释放原有内存
int length= strlen(other.m_data);
m_data = new char[length+1];
strcpy(m_data, other.m_data);
}
2、单链表逆置
(定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点)
struct ListNode
{
int m_nKey;
ListNode *m_pNext;
}
ListNode *ReverseList(ListNode *pHead)
{
ListNode *pReversedHead = nullptr;
ListNode *pNode = pHead;
ListNode *pPrev = nullptr;
while(pNode!=nullptr)
{
ListNode *pNext=pNode->m_pNext;
if(pNext == nullptr)
pReversedHead = pNode;
pNode->m_pNext = pPrev;
pPrev = pNode;
pNode = pNext;
}
return pReversedHead; //返回反转的头节点
}