保姆级题解#2

刹那(。・∀・)ノ゙  •  1年前


这是第二篇保姆级,第一篇详见2302

仍然是单链表啊,本题要求将data域里存数据进行判断

若奇数就输出,偶数跳过

肥肠简单啊,首先我们需要手搓链表的必备步骤:定义、初始化、输入三兄贵

代码如下:

//定义
typedef struct Lnode
{
	int deta;
	Lnode *next;
}node,*linklist;

//初始化
void Begin(linklist &Head)
{
	Head=new node;
	Head->next=nullptr;
}

//输入
void My_Insert(linklist &Head)
{
	linklist R=Head;
	int x;
	cin>>x;
	while(x!=-1)
	{
		linklist p=new node;
		p->deta=x;
		p->next=R->next;
		R->next=p;
		R=p;
		cin>>x;
	}
}

那么可以直接无脑复制的代码部分结束了,接下来该如何实现判断奇数呢

众所周知,单链表是由1个1个的节点组成的,而这些节点通过指针联系在一起

每个节点就是一个结构体变量,里头分为data域(存数据)以及next域(指针)

指针的特性是指地址,因此,我们可以设置终止条件,只要满足条件,就不断的通过next域向下指下一个节点,从而实现遍历的功能

是不是有些懵,其实这玩意用代码只要一句话就可以实现向下指

cur=cur->next;

把这个东西放进循环里,再加上判断奇偶的if,这个函数就完成了

void My_Output(linklist &Head)
{
	node *cur=Head->next;
	int flag=0;
	while(cur!=nullptr)
	{		
		if(cur->deta%2!=0)
		{
			cout<<cur->deta<<" ";	
			flag=1;		
		}	
		cur=cur->next;	
	}
	if(flag==0)
	{
		cout<<"No";
		return;
	}
}

其实就是在输出时动了手脚,原理不难

完整代码在下面

#include <iostream>

using namespace std;

typedef struct Lnode
{
	int deta;
	Lnode *next;
}node,*linklist;

void Begin(linklist &Head)
{
	Head=new node;
	Head->next=nullptr;
}

void My_Insert(linklist &Head)
{
	linklist R=Head;
	int x;
	cin>>x;
	while(x!=-1)
	{
		linklist p=new node;
		p->deta=x;
		p->next=R->next;
		R->next=p;
		R=p;
		cin>>x;
	}
}

void My_Output(linklist &Head)
{
	node *cur=Head->next;
	int flag=0;
	while(cur!=nullptr)
	{		
		if(cur->deta%2!=0)
		{
			cout<<cur->deta<<" ";	
			flag=1;		
		}	
		cur=cur->next;	
	}
	if(flag==0)
	{
		cout<<"No";
		return;
	}
}

int main ()
{
	linklist Head;
	Begin(Head);
	My_Insert(Head);
	My_Output(Head);
	return 0;
}

评论:

没必要手搓链表吧 代码:

#include<bits/stdc++.h>
#include<list>
using namespace std;
int main(){
	list<int> l;
	list<int> n;
	int j=0;
	while(j!=-1){
		cin>>j;
		l.push_back(j);
	}
	for(auto it:l){
		if(it%2==1){
			n.push_back(it);
		}
	}
	if(n.empty()){
		cout<<"No";
	}else{
		for(auto it:n){
			cout<<it<<" ";
		}
	}
	return 0;
}

不是倒一就是胜利  •  1年前

请先登录,才能进行评论