C++如何实现链表转化为数组
时间: 2024-05-08 17:16:41 浏览: 9
链表转化为数组可以分为两个步骤:
1. 获取链表长度,并动态分配数组空间。
2. 遍历链表,将节点的值依次存储到数组中。
具体实现可以参考以下代码:
```c
#include <stdio.h>
#include <stdlib.h>
/* 链表节点结构体 */
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
/* 创建链表 */
ListNode* createList(int nums[], int n) {
ListNode *head = NULL, *tail = NULL;
for (int i = 0; i < n; i++) {
ListNode *node = (ListNode *)malloc(sizeof(ListNode));
node->val = nums[i];
node->next = NULL;
if (head == NULL) {
head = tail = node;
} else {
tail->next = node;
tail = node;
}
}
return head;
}
/* 链表转化为数组 */
int* listToArray(ListNode* head, int* returnSize) {
/* 获取链表长度 */
int len = 0;
ListNode *p = head;
while (p) {
len++;
p = p->next;
}
/* 动态分配数组空间 */
int *arr = (int *)malloc(len * sizeof(int));
*returnSize = len;
/* 遍历链表,将节点的值存储到数组中 */
p = head;
for (int i = 0; i < len; i++) {
arr[i] = p->val;
p = p->next;
}
return arr;
}
int main() {
int nums[] = {1, 2, 3, 4, 5};
int n = sizeof(nums) / sizeof(int);
ListNode *head = createList(nums, n);
int returnSize = 0;
int *arr = listToArray(head, &returnSize);
for (int i = 0; i < returnSize; i++) {
printf("%d ", arr[i]);
}
printf("\n");
free(arr);
return 0;
}
```