题目:下面有结构node的定义,指针head中存放着node节点组成 的单链表的首节点地址,函数odd(head)获取head指向链表 中的序号(注意不是node结构的data字段,且序号从0开始编号) 为奇数的节点,并将这些节点按原有序组成新链表返回。 要求新链表中的节点采用动态内存分配的方式构建, 从而不破坏原链表。如:head指向的链表为:1->2->3->4->5->6, 则odd(head)得到的链表为:2->4->6。请完成C++函数odd的编写。
时间: 2024-04-14 17:29:54 浏览: 245
node-chat:与 socket.io 的节点聊天
以下是函数odd的C++实现:
```cpp
#include <iostream>
struct Node {
int data;
Node* next;
};
Node* odd(Node* head) {
Node* newHead = nullptr; // 新链表的头节点
Node* prev = nullptr; // 新链表的尾节点
// 遍历原链表
int index = 0;
Node* curr = head;
while (curr != nullptr) {
if (index % 2 != 0) { // 序号为奇数
Node* newNode = new Node(); // 创建新节点
newNode->data = curr->data;
newNode->next = nullptr;
if (newHead == nullptr) {
newHead = newNode;
prev = newNode;
} else {
prev->next = newNode;
prev = 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;
// 调用odd函数
Node* result = odd(head);
// 打印结果链表
Node* curr = result;
while (curr != nullptr) {
std::cout << curr->data << " ";
curr = curr->next;
}
return 0;
}
```
运行结果为:2 4 6。函数odd根据题目要求,遍历原链表中的节点,找出序号为奇数的节点,并构建新链表返回。
阅读全文