通过本篇文章你将了解到一下内容:
- Algorithm leetcode 206.反转链表
- Review 使用Java创建第一个区块链 Part1
- Tip Mysql索引背后的数据结构与算法原理
- Share 数据结构可视化网站
Algorithm leetcode 206.反转链表
题目描述:
输入一个链表,反转链表后,输出新链表的表头
设置三个指针,head为当前节点,pre为当前节点的前一个节点,next为当前节点的下一个节点,需要pre和next的目的是让当前节点从pre->head->next1->next2变成pre<-head next1->next2的过程中,用pre让节点反转所指方向,next节点保存next1节点防止链表断开
需要注意的点:
1、如果输入的头结点是null,则返回null
2、链表断裂的考虑
public class Solution {
public ListNode ReverseList(ListNode head) {
if(head == null || head.next == null)
return head;
ListNode pre = null;
ListNode next = null;
while(head != null){
next = head.next;
head.next = pre;
pre = head;
head = next;
}
return pre;
}
}
Review 使用Java创建第一个区块链 Part1
这不是一个功能齐全的生产区块链。相反,这是一个概念验证实现,可帮助您了解区块链对于未来教程的作用。
1、区块链只是一个链/列表块。区块链中的每个区块都有自己的数字签名,包含前一个区块的数字签名,并且有一些数据(例如,这些数据可能是交易)。
2、使用applySha256助手,在Block 类的新方法中计算哈希值。我们必须计算我们不想被篡改的块的所有部分的哈希值。
4、将块存储在ArrayList中,并导入gson以将其视为Json
5、创建一个isChainValid() 布尔方法,它将遍历链中的所有块并比较哈希值。此方法需要检查哈希变量实际上是否等于计算的哈希值,并且前一个块的哈希值等于previousHash变量,对区块链块的任何更改都将导致此方法返回false。
6、对区块链块的任何更改都将导致此方法返回false。
您的区块链:
由存储数据的块组成。
具有将您的块链接在一起的数字签名。
需要工作挖掘证明来验证新块。
可以检查其中的数据是否有效且未更改。
您可以在Github上下载这些项目文件。
Tip Mysql索引背后的数据结构与算法原理
MySQL索引背后的数据结构及算法原理
很不错的一篇文章,对于想快速的对mysql有一定了解很有帮助
Share 数据结构可视化
这个网站提供数据结构可视化演示,都会采用动画的进行增删改查进行演示,最主要的是还提供了js的源码,可供查看。对于有时间这看看源码也是不错的选择