下面有结构node的定义,指针head中存放着node节点组成 的单链表的首节点地址,函数odd(head)获取head指向链表 中的序号(注意不是node结构的data字段,且序号从0开始编号) 为奇数的节点,并将这些节点按原有序组成新链表返回。 要求新链表中的节点采用动态内存分配的方式构建, 从而不破坏原链表。如:head指向的链表为:1->2->3->4->5->6, 则odd(head)得到的链表为:2->4->6。请完成函数odd的编写。
时间: 2024-04-09 16:29:04 浏览: 58
以下是函数`odd`的实现:
```cpp
node* odd(node* head) {
node* oddHead = nullptr; // 新链表的头节点
node* oddTail = nullptr; // 新链表的尾节点
if (head == nullptr) {
return nullptr; // 原链表为空,直接返回空链表
}
int index = 0;
node* curr = head;
while (curr != nullptr) {
if (index % 2 != 0) { // 当前节点序号为奇数
if (oddHead == nullptr) { // 新链表为空
oddHead = new node; // 创建新节点
oddHead->data = curr->data;
oddHead->next = nullptr;
oddTail = oddHead;
} else {
node* newNode = new node; // 创建新节点
newNode->data = curr->data;
newNode->next = nullptr;
oddTail->next = newNode;
oddTail = newNode;
}
}
curr = curr->next;
index++;
}
return oddHead;
}
```
使用示例:
```cpp
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;
node* oddList = odd(head);
```
`oddList`即为按原有序组成的新链表,其中存放着原链表中序号为奇数的节点。
阅读全文