题目描述
代码补全 ——已经给定一个链表,链表的每个节点只含有一个int型元素和Node*指针,该链表共有十个节点, 输出链表元素值为奇数的项。部分代码已经写好,请同学们补全output函数即可。
输入格式输入函数和主函数已经给定,无需同学操作
输出格式输出奇数值,以空格隔开
样例输入
1 3 4 5 6 7 8 10 11 15样例输出
1 3 5 7 11 15
/*students please write your program here*/
#include<iostream>
using namespace std;
struct Node{
int value;
Node* next;
Node(){}
Node(int x) : value(x), next(NULL) {}
};
void init(Node* head){ //链表初始化
int val;
cin>>val;
head->value=val;
Node* tmpNode = head;
for (int i=0;i<9;i++){ //链表共有十个节点,head后还有9个
cin>>val;
Node* pNode = new Node(val);
tmpNode->next=pNode;
tmpNode=pNode;
}
tmpNode->next=NULL;
}
void output(Node* head); //函数原型声明
int main(){
Node head;
init(&head);
output(&head);
return 0;
}
void output(Node* head){
while(head->next){
if(head->value % 2 == 1){
cout<<head->value<<' ';
}
head = head->next;
} //从首结点一直遍历到最末结点的前一个结点
if(head->value % 2 == 1){
cout<<head->value;
} //不能漏掉了最末一个结点
}
void init()函数的图解如下。实际上是在把每一个读入的结点往当前结点的“尾巴”后面去排!与老师讲课时的“把新结点排到当前结点的前面去”的做法刚好相反。这就为链表的“先进先出”或者“后进后出”作了算法上的准备。(数据结构课我还没学,不知道这样说妥不妥?)