暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
c++笔试题汇总.pdf
286
25页
0次
2021-02-22
40墨值下载
反转
单向链表的反转是一个经常被问到的一个面试题也是一个非常基础的问题。比
如一个链表是这样的: 1->2->3->4->5 通过反转后成为 5->4->3->2->1
最容易想到的方法遍历一遍链表利用一个辅助指针存储遍历过程中当前指针
指向的下一个元素然后将当前节点元素的指针反转后利用已经存储的指针往
后面继续遍历。源代码如下:
1. struct linka {
2. int data;
3. linka* next;
4. };
5. void reverse(linka*& head) {
6. if(head ==NULL)
7. return;
8. linka *pre, *cur, *ne;
9. pre=head;
10.cur=head->next;
11.while(cur)
12.{
13. ne = cur->next;
14. cur->next = pre;
15. pre = cur;
16. cur = ne;
17.}
18.head->next = NULL;
19.head = pre;
20.}
还有一种利用递归的方法这种方法的基本思想是在反转当前节点之前先调用递
归函数反转后续节点。源代 码如下。不过这个方法有一个缺点,就是在反转后
的最后一个结点会形成一个环,所以必须将函数的返回的节点的 next 域置为
NULL要改变 head 针,所以了引用。法的源代码如下:
1. linka* reverse(linka* p,linka*& head)
2. {
3. if(p == NULL || p->next == NULL)
4. {
5. head=p;
6. return p;
7. }
8. else
9. {
10. linka* tmp = reverse(p->next,head);
11. tmp->next = p;
12. return p;
13.}
14.}
已知 String 定义下:
class String
{
public:
String(const char *str = NULL); // 通用构造函数
String(const String &another); // 拷贝构造函数
~ String(); // 析构函数
String & operater =(const String &rhs); // 赋值函数
private:
char *m_data; // 于保字符串
};
写出类的成函数实现
答案
String::String(const char *str)
{
if ( str == NULL ) //strlen 数为 NULL 抛异会有这步判断
{
m_data = new char[1] ;
m_data[0] = '\0' ;
}
else
{
m_data = new char[strlen(str) + 1];
strcpy(m_data,str);
}
}
String::String(const String &another)
{
m_data = new char[strlen(another.m_data) + 1];
strcpy(m_data,another.m_data);
}
of 25
40墨值下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜