為什麼下面的代碼,鏈表的創建中,插入和刪除的操作中返回值是對象指針?
01-05
有條件的話換本書吧,這代碼幾乎每行都有問題。
- class name 應該是 LinkedList;
- constructor 應該是 explicit;
- 沒有定義或禁用 copy constructor 和 operator=,作者很可能連 Effective C++ 都沒讀過。
- IsEmpty() 應該是 const;
- GetNode 應該返回 T,並且有 const 重載。更重要的是,為什麼鏈表要提供 O(N) 的下標操作?
- Length() 應該是 const,而且這個實現很可能是 O(N) 的。
- LocateNode() 和 Insert() 的參數應該是 const T;
- Insert 和 Delete 都是 O(N) 的操作,那麼鏈表的特點/優勢如何體現?
- ShowList() 應該是 const;
- 眼花,劃掉
明顯不是對象指針啊,是你這個LinkList&
他返回LinkedList&
比如你往一個list裡面放很多東西
可以:
list.add("中國");list.add("北京市");list.add("海淀區");list.add("中關村小學");
list.add("三年2班");也可以:
list.add("中國").add("北京市").add("海淀區").add("中關村小學").add("三年2班");顯然後者更省事、更直觀。前者你的add函數返回void就可以了,後者就得返回this,所有的面向對象語言都可以這麼玩。
***********
前面也有人指出這幾行代碼有很多問題。
就C++語言來講,最可怕的是這個LinkList對象複製時會出問題,新的對象會使用原對象的head指針,當原對象釋放後,新對象的head就變得不可用了。
即使只看數據結構,這個list實現的也很糟糕。依他這個結構,length()函數效率是極低的。insert和delete這麼重要的函數使用下標也是不知所謂。
我也建議換一本書來讀,數據結構這個東西都已經出現好幾十年了就那點東西也不多,不必讀這些入門讀物。方便鏈式調用
1. 引用返回。比如
ll.insert(1, "a").insert(2, "b").insert(3, "c").delete(1)
大佬們,我打錯了,是對象引用,,,函數的實現中返回的是*this,,為什麼返回值不能是void呢??
一個連引用都不知道是什麼的孩子。
學好C++再來看吧。LinkedList&
推薦閱讀:
※《數據結構與演算法分析C語言描述》真的適合初學者嗎?
※文科生跨考類計算機專業,求分析?
※O(1)刪除鏈表節點?
※演算法書如何選擇?
※超長字元串中如何快速查找一個子串?