int val; // 数据域,可以是任意类型
ListNode* next; // 指针域,指向下一个节点
ListNode(int x) : val(x), next(nullptr) {} // 构造函数,初始化数据域和指针域
在本文中,我们将介绍一个用C++编写的函数,用于从标准输入读取两个链表的数据,并返回一个包含两个链表头节点的向量。函数的参数和返回值都是vector类型,表示一个动态数组。vector是C++标准库中提供的一个容器,它可以存储任意类型的元素,并且可以根据需要自动调整大小。
函数的逻辑是先读取第一个链表的长度n1,然后用一个循环创建n1个节点,并将它们依次连接起来,形成第一个链表。然后将第一个链表的头节点放入向量中。接着读取第二个链表的长度n2,然后用另一个循环创建n2个节点,并将它们依次连接起来,形成第二个链表。然后将第二个链表的头节点放入向量中。最后返回向量,即包含两个链表头节点的数组。
函数的代码如下:
// 定义链表的节点类型
// 定义从标准输入读取两个链表的函数
vector<ListNode*> res; // 定义一个向量,用于存储两个链表的头节点
int n1, n2; // 定义两个变量,用于存储两个链表的长度
cin >> n1; // 从标准输入读取第一个链表的长度
if (n1 > 0) { // 如果第一个链表的长度大于0
ListNode* head1 = new ListNode(0); // 创建一个哑节点,作为第一个链表的头节点
ListNode* cur1 = head1; // 定义一个指针,指向当前节点
for (int i = 0; i < n1; i++) { // 用一个循环创建n1个节点
int x; // 定义一个变量,用于存储节点的数据
cin >> x; // 从标准输入读取节点的数据
ListNode* node = new ListNode(x); // 创建一个新节点,初始化数据域
cur1->next = node; // 将当前节点的指针域指向新节点
cur1 = node; // 将当前节点更新为新节点
res.push_back(head1->next); // 将第一个链表的头节点(不包括哑节点)放入向量中
cin >> n2; // 从标准输入读取第二个链表的长度
if (n2 > 0) { // 如果第二个链表的长度大于0
ListNode* head2 = new ListNode(0); // 创建一个哑节点,作为第二个链表的头节点
ListNode* cur2 = head2; // 定义一个指针,指向当前节点
for (int i = 0; i < n2; i++) { // 用一个循环创建n2个节点
int x; // 定义一个变量,用于存储节点的数据
cin >> x; // 从标准输入读取节点的数据
ListNode* node = new ListNode(x); // 创建一个新节点,初始化数据域
cur2->next = node; // 将当前节点的指针域指向新节点
cur2 = node; // 将当前节点更新为新节点
res.push_back(head2->next); // 将第二个链表的头节点(不包括哑节点)放入向量中
return res; // 返回向量,即包含两个链表头节点的数组
函数的测试样例如下:
vector<ListNode*> lists = readTwoLists(); // 调用函数,从标准输入读取两个链表
for (ListNode* head : lists) { // 遍历向量中的每个链表头节点
ListNode* cur = head; // 定义一个指针,指向当前节点
while (cur) { // 当当前节点不为空时
cout << cur->val << " "; // 输出当前节点的数据
cur = cur->next; // 将当前节点更新为下一个节点
cout << endl; // 输出换行符
return 0; // 结束程序