用C/C++编程写翻转链表
时间: 2023-04-06 20:01:52 浏览: 87
可以使用以下代码来用 C/C++ 编程写翻转链表:
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* reverseList(ListNode* head) {
ListNode* prev = NULL;
ListNode* curr = head;
while (curr != NULL) {
ListNode* next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
return prev;
}
相关问题
用c/c++编写代码统计链表的长度
下面是使用C语言编写统计链表长度的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
struct ListNode {
int val;
struct ListNode* next;
};
// 统计链表长度
int getLength(struct ListNode* head) {
int length = 0;
while (head != NULL) {
length++;
head = head->next;
}
return length;
}
int main() {
// 创建链表
struct ListNode* head = (struct ListNode*)malloc(sizeof(struct ListNode));
head->val = 1;
head->next = (struct ListNode*)malloc(sizeof(struct ListNode));
head->next->val = 2;
head->next->next = (struct ListNode*)malloc(sizeof(struct ListNode));
head->next->next->val = 3;
head->next->next->next = NULL;
// 统计链表长度并输出
int length = getLength(head);
printf("链表长度为:%d\n", length);
// 释放链表节点内存
free(head->next->next);
free(head->next);
free(head);
return 0;
}
```
在示例代码中,我们定义了一个链表节点结构体,包含一个整型值val和一个指向下一个节点的指针next。然后定义了一个函数getLength来统计链表长度,该函数使用while循环遍历链表,每遍历一个节点就将长度加1。最后,我们在main函数中创建了一个包含三个节点的链表,调用getLength函数统计链表长度并输出,最后释放链表节点内存。
c/c++数组怎么转换链表举例说明
可以使用指针来实现数组和链表之间的转换。具体来说,可以定义一个指向链表节点的指针,然后遍历数组中的元素,将每个元素插入到链表中。以下是一个示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
struct ListNode {
int val;
struct ListNode *next;
};
struct ListNode* arrayToList(int* nums, int size) {
struct ListNode* head = NULL;
struct ListNode* tail = NULL;
for (int i = 0; i < size; i++) {
struct ListNode* node = (struct ListNode*)malloc(sizeof(struct ListNode));
node->val = nums[i];
node->next = NULL;
if (head == NULL) {
head = node;
tail = node;
} else {
tail->next = node;
tail = node;
}
}
return head;
}
void printList(struct ListNode* head) {
while (head != NULL) {
printf("%d ", head->val);
head = head->next;
}
printf("\n");
}
int main() {
int nums[] = {1, 2, 3, 4, 5};
int size = sizeof(nums) / sizeof(nums[0]);
struct ListNode* head = arrayToList(nums, size);
printList(head);
return 0;
}
```
在上面的代码中,我们定义了一个结构体 `ListNode`,表示链表节点。然后定义了一个函数 `arrayToList`,用于将数组转换为链表。在函数中,我们遍历数组中的每个元素,创建一个新的节点,并将其插入到链表中。最后返回链表的头节点。我们还定义了一个函数 `printList`,用于打印链表中的所有元素。在 `main` 函数中,我们调用 `arrayToList` 函数将数组转换为链表,并调用 `printList` 函数打印链表中的所有元素。