题目:下面有结构node的定义,指针head中存放着node节点组成 的单链表的首节点地址,函数odd(head)获取head指向链表 中的序号(注意不是node结构的data字段,且序号从0开始编号) 为奇数的节点,并将这些节点按原有序组成新链表返回。 要求新链表中的节点采用动态内存分配的方式构建, 从而不破坏原链表。如:head指向的链表为:1->2->3->4->5->6, 则odd(head)得到的链表为:2->4->6。请完成函数odd的编写。
时间: 2024-04-14 13:27:13 浏览: 22
下面是函数`odd`的实现代码:
```c
#include <stdio.h>
#include <stdlib.h>
struct node {
int data;
struct node* next;
};
struct node* odd(struct node* head) {
struct node* new_head = NULL;
struct node* new_tail = NULL;
struct node* curr = head;
int index = 0;
while (curr != NULL) {
if (index % 2 != 0) { // 如果序号为奇数
struct node* new_node = (struct node*)malloc(sizeof(struct node));
new_node->data = curr->data;
new_node->next = NULL;
if (new_head == NULL) { // 如果新链表为空
new_head = new_node;
new_tail = new_node;
} else {
new_tail->next = new_node;
new_tail = new_node;
}
}
curr = curr->next;
index++;
}
return new_head;
}
```
你可以调用这个函数来获取原链表中序号为奇数的节点,并将它们组成新链表返回。
阅读全文