下面有结构node的定义,指针head中存放着node节点组成的单链表的首节点地址,函数even(head)获取head指向链表中的序号(注意不是node结构的data字段,且序号从0开始编号)为偶数的节点,并将这些节点按原有序组成新链表返回。 要求新链表中的节点采用动态内存分配的方式构建,从而不破坏原链表。如:head指向的链表为:1->2->3->4->5->6,则even(head)得到的链表为:1->3->5。请完成函数even的编写。不引入其他库函数,在program和end之间完成下列代码: #include <iostream> using namespace std; struct node { //链表节点定义 int data; node* next; }; node* even(node* h) { /**********Program**********/ /********** End **********/ } int main() { node* head = NULL, * t; int n, j; cin >> n; n = n % 47; head = new node; head->data = n; t = head; for (j = 0; j < 20; j++) { cin >> n; n = n % 47; t->next = new node; t = t->next; t->data = n; } t->next = NULL; t = even(head); while (t) { cout << t->data << "->"; t = t->next; } cout << endl; return 0; }
时间: 2023-08-14 13:02:27 浏览: 108
下面是实现函数even的代码:
```cpp
node* even(node* h)
{
node* newHead = NULL; // 新链表的头节点
node* newTail = NULL; // 新链表的尾节点
node* current = h; // 当前节点
int count = 0; // 节点计数器,从0开始编号
while (current != NULL) {
if (count % 2 == 0) { // 如果是偶数序号的节点
if (newHead == NULL) { // 如果新链表为空,设置新链表的头节点和尾节点为当前节点
newHead = current;
newTail = current;
} else { // 否则将当前节点连接到新链表的尾部,更新尾节点为当前节点
newTail->next = current;
newTail = current;
}
}
count++;
current = current->next;
}
if (newTail != NULL) { // 如果新链表不为空,将新链表的尾节点的next指针设为NULL
newTail->next = NULL;
}
return newHead; // 返回新链表的头节点
}
```
此函数遍历原链表,将序号为偶数的节点构建成一个新链表并返回。
阅读全文