c++ 链表_算法学习笔记 - 链表 - 单链表的粗糙实现
常用的鏈表有單鏈表、雙鏈表、循環鏈表。
概念看得再多,理解得再多,也不一定能夠寫得出來。所以動動手,多練習才是提升能力的關鍵。
有朋友留言說道:建議大家在實現之前的思考時間不要太長。一是先用自己能想到的暴力方法實現試試。另外就是在一定時間內(比如半個小時到一個小時)實在想不到就要在網上搜搜答案。有的算法很巧妙,不能生想,就能夠想到的。說的真好。畢竟從自己已有的知識出發,才知道自己所欠缺的是什么。
首先單鏈表是什么樣的呢
這里用了網絡的圖片。
每個結點存儲一個數據,還有一個指針,指向的是下一個結點。
但為了區分鏈表為空的情況以及方便操作鏈表,在A前面加了一個頭結點,頭結點不存儲數據,頭結點的指針部分,指向鏈表的第一個結點。如上圖:Head->A->B->C->E就組成了一個單鏈表。
由此開始粗糙的實現單鏈表(Java實現):
1.先從結點開始:
public結點類Node,包含了一個數據data,還有一個指針next(Java這里叫引用)
有了結點類后,試試幾個結點鏈起來
2.沒有頭結點的鏈表
public這樣便表達了A->B->C->E這間的鏈表的關系,但總覺得少了點什么。有了這個鏈表,能做什么用,而且A->B->C->E看起來沒問題,但也不夠直觀。對,我們應該遍歷下數據,看看對不對。
PS:這里方便寫代碼,將class Node加了static修飾
3.鏈表的遍歷,引入頭結點的鏈表比較像回事
遍歷從頭結點開始,下一個結點,取值,下一個結點,取值,直到沒有下一個結點。也就是next,next,next直到next為null
public執行結果
Node data: 1 Node data: 2 Node data: 3 Node data: 4 Process finished with exit code 0寫了一個traverse方法來遍歷鏈表,不傳head,直接傳nodeA,開始遍歷好像也可以。但是沒有頭結點,就處理不了空鏈表的情況。代碼寫起來比較奇怪。
PS:頭結點沒有存儲數據,所以保留空參數的構造方法Node()。
至此,遍歷已經寫好。但是建立head,nodeA,nodeB,nodeC..之間的關系的代碼,直接賦值的方式顯得非常的簡陋。是不是可以考慮起個名字叫addNode,表示鏈表新增了一個新的結點。因此我們可以重新審視上面的代碼,上面的代碼一直是聚焦在Node。head,nodeA,nodeB,nodeC...的創建和關系的建立。node建立關系后成為鏈表。不對,我們可以從上到下來看。關注鏈表。然后才是鏈表中的結點Node。起個鏈表的結構叫LinkList(這個名字聽起來就像鏈表)
總結
以上是生活随笔為你收集整理的c++ 链表_算法学习笔记 - 链表 - 单链表的粗糙实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pyqt5从子目录加载qrc文件_【JV
- 下一篇: ant centos环境下 编译没有将配