下面有结构node的定义,指针head中存放着node节点组成 的单链表的首节点地址,函数even(head)获取head指向链表 中的序号(注意不是node结构的data字段,且序号从0开始编号) 为偶数的节点,并将这些节点按原有序组成新链表返回。 要求新链表中的节点采用动态内存分配的方式构建, 从而不破坏原链表。如:head指向的链表为:1->2->3->4->5->6, 则even(head)得到的链表为:1->3->5。请完成函数even的编写。
时间: 2024-04-12 15:29:41 浏览: 117
create_linklist_head.rar_Create_LinkList c++_head_头插法
下面是函数even的编写:
```C++
#include <iostream>
struct node {
int data;
node* next;
};
node* even(node* head) {
node* newHead = nullptr;
node* newTail = nullptr;
node* curr = head;
int index = 0;
while (curr != nullptr) {
if (index % 2 == 0) {
node* newNode = new node;
newNode->data = curr->data;
newNode->next = nullptr;
if (newHead == nullptr) {
newHead = newNode;
newTail = newNode;
} else {
newTail->next = newNode;
newTail = newNode;
}
}
curr = curr->next;
index++;
}
return newHead;
}
int main() {
// 创建链表 1->2->3->4->5->6
node* head = new node;
head->data = 1;
node* node2 = new node;
node2->data = 2;
head->next = node2;
node* node3 = new node;
node3->data = 3;
node2->next = node3;
node* node4 = new node;
node4->data = 4;
node3->next = node4;
node* node5 = new node;
node5->data = 5;
node4->next = node5;
node* node6 = new node;
node6->data = 6;
node5->next = node6;
node6->next = nullptr;
// 调用 even 函数
node* newHead = even(head);
// 输出新链表
node* curr = newHead;
while (curr != nullptr) {
std::cout << curr->data << "->";
curr = curr->next;
}
std::cout << "nullptr" << std::endl;
// 释放内存
curr = newHead;
while (curr != nullptr) {
node* temp = curr;
curr = curr->next;
delete temp;
}
return 0;
}
```
运行结果为:
```
1->3->5->nullptr
```
函数even的思路是遍历原链表,对序号为偶数的节点进行复制,并将复制的节点连接成新链表。最后返回新链表的头节点地址。在主函数中,我们创建了一个示例链表,调用even函数并打印新链表的节点值,最后释放内存。
阅读全文