链表的概念
链表是一种内存中非连续(或连续)的存储结构,通过指针链接其中的结点来实现串联。链表中的结点由两部分组成,一部分存放数据,另一部分存放指针。
一个节点两部分内容,那我们就要想到,一个元素,多种属性,这不就是结构体了
以上是一个结点,我们往往会遇到很多结点
一般对链表的操作就是插入与删除
链表插入
创建一个链表,按顺序存储1~5数字。在数字n前(1<n≤5)插入数字m(1<m<2
31
),从首结点依次输出链表中的数据。
输入描述
一行两个整数,分别表示n和m。
输出描述
从首结点依次输出链表中的数据,数字之间空格分隔。
样例输入 1
3 9
样例输出 1
1 2 9 3 4 5
#include<bits/stdc++.h>
using namespace std;
struct node{int data;node *next;
};
int main()
{node a = {1,NULL};node b = {2,NULL};node c = {3,NULL};node d = {4,NULL};node e = {5,NULL};a.next = &b;b.next = &c;c.next = &d;d.next = &e;int n;node f;cin>>n>>f.data;node *p = &a;while(p!=NULL){if(p->next->data==n){f.next=p->next;p->next=&f;break;}p=p->next;}p = &a;while(p!=NULL){cout<<p->data<<" ";p = p->next;}return 0;
}
链表删除
创建一个链表,按顺序存储1~5数字。删除含有数字n的结点(1<n≤5),从链表首结点依次输出链表中的数据。
输入描述
一个整数表示n。
输出描述
从首结点依次输出链表中的数据,数字之间空格分隔。
样例输入 1
3
样例输出 1
1 2 4 5
#include<bits/stdc++.h>
using namespace std;
struct node{int data;node *next;
};
int main()
{node a = {1,NULL};node b = {2,NULL};node c = {3,NULL};node d = {4,NULL};node e = {5,NULL};a.next = &b;b.next = &c;c.next = &d;d.next = &e;int n;cin>>n;node *p = &a;while(p!=NULL){if(p->next->data==n){p->next=p->next->next;break;}p=p->next;}p = &a;while(p!=NULL){cout<<p->data<<" ";p = p->next;}return 0;
}
示例题目
2923 3的倍数
小童想输入一些数字,输入-1停止输入。统计在这些数字中3的倍数有哪些,请你帮小童完成代码吧。
输入描述
一行,一些整数数字,最后一个数字为-1。
输出描述
一行,能被3整除的数字。
样例输入 1
1 2 3 4 5 6 7 8 9 -1
样例输出 1
3 6 9
这个题不用链表那是轻轻松松就过了,我们来看链表怎么做【作为链表的辅助练习】
#include<bits/stdc++.h>
using namespace std;
struct node{int data;node *next;
}*head,*tail,*p;
int main(){int n;node *head = NULL, *tail = NULL;while(true){cin>>n;if(n==-1) break;p=new node;p->data=n;p->next=NULL;tail->next=p;tail=p;}p=head;while(p->next!=NULL){p=p->next;if(p->data%3==0) cout<<p->data<<' ';}return 0;
}
2921 统计个数
小鹿想输入一些整数数字,输入-1停止输入。在输入一个数字n,统计在这些数字中,n出现了多少次。请你编写代码帮助小鹿实现吧。
输入描述
共2行,第一行,一些整数数字,最后一个数字为-1。第二行,一个整数n,表示要查找的数字。
输出描述
一个整数,表示n出现的次数。
样例输入 1
6 1 2 3 4 6 5 3 3 2 1 3 -1
3
样例输出 1
4
这个题主要考的链表元素的查询,就用模板套就可以啦
#include<iostream>
using namespace std;
struct node{int data;node *next;
}*head,*tail,*p;
int main(){int n;tail=head=new node;while(true){cin>>n;if(n==-1) break;p=new node;p->data=n;tail->next=p;p->next=NULL;tail=p;}int m,ans=0;cin>>m;p=head;while(p->next!=NULL){p=p->next;if(m==p->data) ans++;}cout<<ans;return 0;
}