链表思想的题目

2024-09-04 05:32
文章标签 链表 题目 思想

本文主要是介绍链表思想的题目,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

P1160 队列安排

用数组和结构题模拟链表

#include <bits/stdc++.h>
using namespace std;
int n, m, k, p, x, head;
struct node
{int data;int pre;int next;
}a[100010];
//将x插到y的左边 
void insert(int x, int y)
{//如果y左边没有同学 if(a[y].pre==0){head=x;a[y].pre=x;a[x].next=y;}else{	//y左边有同学 int temp=a[y].pre;	//记录y同学左边的同学temp a[temp].next=x;		//将temp同学的右侧标记为x同学 a[x].pre=temp;		//将x同学的左侧标记为temp同学a[x].next=y;		//将x同学的右侧标记为y同学a[y].pre=x;			//将y同学的左侧标记为x同学 }
}
void push_back(int x, int y)
{//如果y右边没有同学 if(a[y].next==0){a[y].next=x;a[x].pre=y;}else{	//y右边有同学 int temp=a[y].next;	//记录y同学右边的同学temp a[temp].pre=x;		//将temp同学的左侧标记为x同学 a[x].next=temp;		//将x同学的右侧标记为temp同学a[x].pre=y;			//将x同学的左侧标记为y同学a[y].next=x;		//将y同学的右侧标记为x同学 }
}
int main()
{scanf("%d", &n);for(int i=1; i<=n; ++i){a[i].data=i;}head=1;		//头部位置 for(int i=2; i<=n; ++i){scanf("%d %d", &k, &p);if(p==0){	//将i号同学插到k同学的左边 insert(i, k);}else{		//将i号同学插到k同学的右边 push_back(i, k);}}scanf("%d", &m);for(int i=1; i<=m; ++i){scanf("%d", &x);a[x].data=0;}while(a[head].next!=0){if(a[head].data!=0){printf("%d ", a[head].data);	}head=a[head].next;}if(a[head].data!=0){printf("%d", a[head].data);}return 0;
}

这篇关于链表思想的题目的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1135125

相关文章

Linux链表操作方式

《Linux链表操作方式》:本文主要介绍Linux链表操作方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、链表基础概念与内核链表优势二、内核链表结构与宏解析三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势六、典型应用场景七、调试技巧与

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

hdu1496(用hash思想统计数目)

作为一个刚学hash的孩子,感觉这道题目很不错,灵活的运用的数组的下标。 解题步骤:如果用常规方法解,那么时间复杂度为O(n^4),肯定会超时,然后参考了网上的解题方法,将等式分成两个部分,a*x1^2+b*x2^2和c*x3^2+d*x4^2, 各自作为数组的下标,如果两部分相加为0,则满足等式; 代码如下: #include<iostream>#include<algorithm

csu1329(双向链表)

题意:给n个盒子,编号为1到n,四个操作:1、将x盒子移到y的左边;2、将x盒子移到y的右边;3、交换x和y盒子的位置;4、将所有的盒子反过来放。 思路分析:用双向链表解决。每个操作的时间复杂度为O(1),用数组来模拟链表,下面的代码是参考刘老师的标程写的。 代码如下: #include<iostream>#include<algorithm>#include<stdio.h>#

深入手撕链表

链表 分类概念单链表增尾插头插插入 删尾删头删删除 查完整实现带头不带头 双向链表初始化增尾插头插插入 删查完整代码 数组 分类 #mermaid-svg-qKD178fTiiaYeKjl {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-

题目1254:N皇后问题

题目1254:N皇后问题 时间限制:1 秒 内存限制:128 兆 特殊判题:否 题目描述: N皇后问题,即在N*N的方格棋盘内放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在同一斜线上。因为皇后可以直走,横走和斜走如下图)。 你的任务是,对于给定的N,求出有多少种合法的放置方法。输出N皇后问题所有不同的摆放情况个数。 输入

题目1380:lucky number

题目1380:lucky number 时间限制:3 秒 内存限制:3 兆 特殊判题:否 提交:2839 解决:300 题目描述: 每个人有自己的lucky number,小A也一样。不过他的lucky number定义不一样。他认为一个序列中某些数出现的次数为n的话,都是他的lucky number。但是,现在这个序列很大,他无法快速找到所有lucky number。既然

建立升序链表

题目1181:遍历链表 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2744 解决:1186 题目描述: 建立一个升序链表并遍历输出。 输入: 输入的每个案例中第一行包括1个整数:n(1<=n<=1000),接下来的一行包括n个整数。 输出: 可能有多组测试数据,对于每组数据, 将n个整数建立升序链表,之后遍历链表并输出。 样例输

函数式编程思想

我们经常会用到各种各样的编程思想,例如面向过程、面向对象。不过笔者在该博客简单介绍一下函数式编程思想. 如果对函数式编程思想进行概括,就是f(x) = na(x) , y=uf(x)…至于其他的编程思想,可能是y=a(x)+b(x)+c(x)…,也有可能是y=f(x)=f(x)/a + f(x)/b+f(x)/c… 面向过程的指令式编程 面向过程,简单理解就是y=a(x)+b(x)+c(x)

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟)

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟) 题目描述 给定一个链表,链表中的每个节点代表一个整数。链表中的整数由 0 分隔开,表示不同的区间。链表的开始和结束节点的值都为 0。任务是将每两个相邻的 0 之间的所有节点合并成一个节点,新节点的值为原区间内所有节点值的和。合并后,需要移除所有的 0,并返回修改后的链表头节点。 思路分析 初始化:创建一个虚拟头节点