首先強調一點,數據結構和算法其實和語言沒有太大關系,編程語言只是我們實現算法的工具。這里我為你整理了一份常見的你可以嘗試去實現的算法清單:
1.O(1)時間刪除鏈表節點
2.鏈表反轉
3.旋轉單鏈表
4.查到倒數第K個鏈表節點
5.求鏈表的中間節點
6.劃分鏈表使得所有小于x的節點排在大于等于x的節點之前
7.合并有序鏈表
8.刪除鏈表中的重復節點
9.判斷單鏈表是否有環(快慢指針)
10.判斷兩個無環鏈表是否相交
1.快速排序
2.插入排序算法
3.選擇排序
4.堆排序
5.希爾排序
6.基數排序
7.冒泡排序
8.歸并排序
9.二叉樹排序
10.計數排序
11.桶排序
1.計算二叉樹節點個數
2.求樹的最大層數(深度)
3.最小深度
4.二叉樹的前序遍歷(遞歸算法)
5.二叉樹非遞歸前序遍歷
6.二叉樹中序遍歷(遞歸)
7.二叉樹中序遍歷非遞歸
8.后續遍歷
9.非遞歸后序遍歷二叉樹
10.自下而上分層遍歷
11.從上而下層次打印
12.求第層節點個數
13.求第層的葉子節點個數
14.兩顆二叉樹是否結構相同
15.判斷是否是平衡二叉樹
16.判斷是否是對稱二叉樹
17.求二叉樹的最低公共祖先
18.求二叉樹的長度或者直徑(疑問)·
19.路徑總和II
20.求根到葉子節點數字之和
當這些基礎算法都掌握了,這個時候再去分析JDK里面用到的各種數據結構或者算法,比如說Collections類的sort是采用的什么排序方式(不止一種額,分情況有好幾種);然后再嘗試去分心JDK里面各種數據結構的使用場景,比如說紅黑樹、隊列、堆棧、跳躍表之類的;最后,再去思考或者總結各種算法與數據結構最適用的場景。如果這些你都很清楚了,那么我相信你的是算法與數據結構肯定已經學的很好了。