6-4 翻转链表(C++版) 分数 25 作者 李廷元 单位 中国民用航空飞行学院 本题要求实现翻转一个链表的功能。链表类ListNode的定义已经给出。要求在Solution类中给出有关函数的实现。 函数接口定义: /* * 翻转链表。head为链表的头指针。 * 函数返回值为翻转后的链表的头指针。 */ ListNode *reverse(ListNode *head); /* * 数组arr存储创建链表用的数据,n为数组长度。 * 函数返回值为创建的新链表的头指针。 */ L
时间: 2023-08-06 22:09:04 浏览: 255
我明白了,你想让我实现翻转链表的功能。下面是我给出的C++代码:
```c++
ListNode* reverse(ListNode* head) {
if (head == nullptr || head->next == nullptr) {
return head;
}
ListNode* prev = nullptr;
ListNode* cur = head;
while (cur != nullptr) {
ListNode* next = cur->next;
cur->next = prev;
prev = cur;
cur = next;
}
return prev;
}
```
这段代码实现了翻转链表的功能,通过遍历链表,将每个节点的指针反转,最终返回新的头节点。同时,为了避免链表为空或只有一个节点的情况,我们先进行了判断。如果需要创建新链表并存储数据,可以使用类似下面的代码:
```c++
ListNode* createList(int arr[], int n) {
if (n == 0) {
return nullptr;
}
ListNode* head = new ListNode(arr[0]);
ListNode* tail = head;
for (int i = 1; i < n; i++) {
tail->next = new ListNode(arr[i]);
tail = tail->next;
}
return head;
}
```
这段代码会根据给定的数组创建一个新的链表,并返回头节点。
阅读全文