在 leetcode 的单向链表的题目中,通常会以数组的形式给出数据,导致我们在本地调试时,非常不方便。跟之前我们修改二叉树的样例一样:将 leetcode 中二叉树的数组结构转为真实的树结构。 这里我们写两个转换程序,实现单向链表和数组的双向转换。 在 C++ 的语言中,leetcode 官方给出的链表结构: 访问单向链表通常有循环和递归两种方式,这里转换时,我们也用两种方式来实现。 采用循环的方式,最需要注意的一点是头指针的处理,头指针的指向是不能跟着循环一起移动,需要单独处理。 使用递归的方式时,我这里传了一个下标过去,表示当前处理的是哪个节点。 上面无论是哪种转换方式,使用方式都是一样的。 链表转数组最简单的方式就是循环的方式了,直到链表的最后一个节点截止。 我们可以在 leetcode 中选择一个题目来测试下:剑指 Offer 06. 从尾到头打印链表。struct ListNode
{
int val;
ListNode *next;
ListNode() : val(0), next(nullptr)
{
}
ListNode(int x) : val(x), next(nullptr)
{
}
ListNode(int x, ListNode *next) : val(x), next(next)
{
}
};
1. 数组转单向链表 #
1.1 循环的方式 #
/**
* 数组转单向链表的循环方式
* @param {vector
* @return {ListNode*} 构建的链表
*/1.2 递归的方式 #
/**
* 数组转单向链表的递归方式
* @param {vector
* @param {?int} index 数组的下标
* @return {ListNode*} 构建的链表
*/vector<int> nums = {1, 2, 3, 4, 5};
auto head = vectorToListNode(nums);
while (head) {
cout << head->val << endl;
head = head->next;
}
2. 单向链表转数组 #
/**
* 单向链表转数组
* @param {ListNode*} head 链表的头指针
* @return {vector
*/3. 测试 #
版权属于:
加速器之家
作品采用:
《
署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)
》许可协议授权
评论