MOOC清华《程序设计基础》第8章第1题:代码补全-输出链表的奇数值项

题目描述

代码补全 ——已经给定一个链表,链表的每个节点只含有一个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()函数的图解如下。实际上是在把每一个读入的结点往当前结点的“尾巴”后面去排!与老师讲课时的“把新结点排到当前结点的前面去”的做法刚好相反。这就为链表的“先进先出”或者“后进后出”作了算法上的准备。(数据结构课我还没学,不知道这样说妥不妥?)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值