刹那(。・∀・)ノ゙ • 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;
}
请先登录,才能进行评论