鍊錶的頭結點要不要引發的思考

2021-10-17 11:31:20 字數 1205 閱讀 5241

當我學習鍊錶的時候,我在乙個問題上陷入了糾結:「不同的教材對鍊錶的頭結點有著不同的看法,有的沒有這個沒有資料的頭結點,有的有著這個頭結點。」這個問題的答案,會影響著**的實現,在判斷p->next的寫法上會讓你和教材上的實現不同,這很困擾。

我曾確定選擇後者時,在做考試題和刷leetcode時卻碰到鍊錶以前者的方式。這讓我很難受,意味著我要推翻之前已經很是熟悉的寫法,需要調整遍歷時的思考方式和實現時要特意處理頭結點。

所以,我現在要轉換成前者嗎,以及隨之付出即將花費我大量時間來調整筆記,這個對於提公升能力價效比不高的行為值得嗎?

在我下定決心要採取前者時,我意識到「我已經陷入了一種不好的思維」。

放在這個問題上,就是「我為著選擇前者後者而糾結,卻沒有考慮兩者各自的利弊,只是單出地用腳投票。」

/**

* definition for singly-linked list.

* struct listnode

* listnode(int x) : val(x), next(nullptr) {}

* listnode(int x, listnode *next) : val(x), next(next) {}

* };

*/listnode*

removenthfromend

(listnode* head)

所以,我應該選擇有頭結點的方式。這才是理智的思考。

我記錄這個例子的目的,不是說明鍊錶,而是揭發問題背後的大問題:

我以前總是在多個「平台」之間跳來跳去,跳在一方就開始鄙視另一方,說著類似「***天下第一」之類的。這樣帶來了巨大的時間成本、學習成本、精力成本,以及在真正的能力提公升上卻毫無建樹。比如刷lc先用python一直刷,後來想要c++,用把之前做過的再用c++來一遍,但是動態規劃、樹之類的演算法我還是沒有得到提高。

這個大問題更深一步挖掘:「是把學習的工具放在重點,還是把用工具完成的作品放在重點」。比如,選擇pytorch還是tensorflow,背後都是學習機器學習的思想。

在意識到我應該關注作品後,對於所謂的「工具的門戶之見」我也明白了:「我不應該像狂信徒一樣,對著其他的工具抱有敵對心態。而是哪種工具好用、適合用、能更好解決問題,我用哪種」。比如,leetcode要沒有頭結點的,那我將它轉化成有頭結點。此外,工具日新月異,江山代有才人出,更不應該抱著這種腐朽的心態,畢竟現在已經沒有幾個人學pascal了。

鍊錶的虛擬頭結點

public class linkedlist public node e e public node override public string tostring 虛擬頭結點 private node dummyhead private int size public linkedlist 獲取...

關於公司要不要設立測試的討論

不久前關於測試的討論帖子上的發言 第乙個問題,要不要專職測試員。如果推崇把質量作為企業的核心價值,我認為專職的測試是必須的,無論團隊規模大小。這是質量和專業分工的關係決定的。做事情的人不能和監督的人是同乙個人,打個不恰當的比方就是運動員不能是裁判員。可能有人會說,某某專案沒有測試也做得不錯,我相信,...

企業太小的時候IT規劃要不要做?

企業太小的時候it規劃要不要做?drate 發表於 2006 5 20 10 49 00 昨天和幾個朋友去打籃球,好久不動了,活動一下,對自己的身體的確有好處,大累之後,睡覺也是特別的香。和我一塊打球的,有某企業的乙個it主管,由於他們公司的it應用較小,去年他還是光桿司令,今年才有一了乙個助手 同...