如何用数组来控制指针实现链表.md
- 我们一般看到的链表定义都是这样的
1 | struct ListNode { |
但是,我们可以用一个下标数组,来实现 *next的操作 我们可以用数组实现next指针的功能,并实现排序
1 | //比如这样,我们建立两个数组,第一个数组存储具体数字,第二个数组存储下标 |
- 具体每次运行的结果,请看运行数据.md
上面的是简单的排序操作,我们再结合一下例题
有n个盒子在桌子上的一条线上从左到右编号为1……n。你的任务是模拟四种操作
1 X Y 移动盒子编号X到盒子编号Y的左边(如果X已经在Y的左边了就忽略)
2 X Y 移动盒子编号X到盒子编号Y的右边(如果X已经在Y的右边了就忽略)
3 X Y 交换盒子编号X与盒子编号Y的位置
4 将整条线反转
操作保证合法,X不等于Y
举一个例子,如果n=6,操作 1 1 4然后就变成了2 3 1 4 5 6;再操作 2 3 5就变成了 2 1 4 5 3 6;再操作 3 1 6 就变成 2 6 4 5 3 1;最后操作4,就变成了 1 3 5 4 6 2
输入
最多有10组数据,每个数据会包含两个整数n,m(1≤n,m<100,000), 接下来是m行数据,表示操作。
输出
对于每组数据,输出他们奇数位置的编号的和。
1 | /* |
总结
- 综上,我们可以用数组来模拟链表,并做一些类似于链表的操作,还有链式前项星等应用也是通过数组模仿链表来实现的,如果需要操作的对象是无序的,我们需要不仅要建立指针数组,还要建立一个存储数据的数组,来做一个映射。但是如果操作的是有序的1,2,3,…..n的话,其实没必要再新建一个数组存放数据了,直接用数组下标就可以完成操作了
- 其次,我们在做题目分析的时候需要判断头节点是否会被操作,如果需要被操作,我们还要新建一个dummyNode作为哨兵节点。
下面是运行的数据
1 | ```c++ |
```