C++笔试题经典总汇:链表反转、String类实现

4星 · 超过85%的资源 需积分: 0 4 下载量 32 浏览量 更新于2024-07-27 收藏 1MB PDF 举报
C++笔试题汇总 以下是对C++笔试题汇总的知识点总结: **链表反转** 链表反转是一个经典的面试题,也是一个非常基础的问题。给定一个单向链表,如何将其反转?反转后的链表将变为原链表的逆序排列。 例如,一个链表是这样的:1->2->3->4->5,通过反转后将变为5->4->3->2->1。 解决这个问题有两种方法:遍历方法和递归方法。 **遍历方法** 遍历方法最容易想到的方法是遍历一遍链表,利用一个辅助指针,存储遍历过程中当前指针指向的下一个元素,然后将当前节点元素的指针反转后,利用已经存储的指针往后面继续遍历。 源代码如下: ```c struct linka{ int data; linka* next; }; void reverse(linka*& head){ if(head == NULL) return; linka* pre, *cur, *ne; pre = head; cur = head->next; while(cur){ ne = cur->next; cur->next = pre; pre = cur; cur = ne; } head->next = NULL; head = pre; } ``` **递归方法** 递归方法的基本思想是在反转当前节点之前先调用递归函数反转后续节点。 源代码如下: ```c linka* reverse(linka* p, linka*& head){ if(p == NULL || p->next == NULL){ head = p; return p; }else{ linka* tmp = reverse(p->next, head); tmp->next = p; return p; } } ``` 注意:递归方法有一个缺点,就是在反转后的最后一个结点会形成一个环,所以必须将函数的返回的节点的next域置为NULL。 **String类** String类是一个基本的字符串类,定义如下: ```c class String{ public: String(const char* str = NULL); // 通用构造函数 String(const String& another); // 拷贝构造函数 ~String(); // 析构函数 String& operator=(const String& rhs); // 赋值函数 }; ``` 这个类提供了基本的字符串操作,包括构造函数、拷贝构造函数、析构函数和赋值函数。 这些问题都是C++笔试题汇总中的一部分,需要candidates具备基础的C++知识和编程能力。