【不三不四的腦洞】記錄一次 “街頭搭訕” 之對旋轉(zhuǎn)鏈表算法的感悟

ShaderJoy 的不三不四腦洞

單身越久越難脫單

前一陣子在網(wǎng)上看到一句話 —— 單身越久越難脫單

作為大齡單身程序猿的我深以為然,甚至覺得單身的時(shí)間久了,真的會喪失和異性相處的能力。

以我個(gè)人的生活感受(當(dāng)然不能代表其他所有人單身都是這個(gè)原因)來說,惡性循環(huán) 主要包含以下點(diǎn)

單身 -> 宅家不愛出門 -> 奶茶甜品不離手,身材走樣 -> 缺乏運(yùn)動和面對面社交 -> 圈子變小、逐漸社恐 -> 單身

而一旦陷入以上的惡性循環(huán),脫單可不就越來越難了嗎?

image.png

所以我決定今天下定決心 打破 這個(gè)循環(huán),那就先從 身材管理(健身減肥) 開始!

網(wǎng)上有句話說的很好 —— 一個(gè)連自己身體都無法掌控的人,如何掌控人生!
一個(gè)人的身材,25歲前,是爹媽給的;25歲之后,是自己修的。
能管好自己身材的人,往往能管理好自己的生活和工作。反之,臃腫的身材背后,可能是一團(tuán)亂糟糟的生活。
肥胖,給工作帶來影響,生活質(zhì)量也大打折扣,還談什么奮斗拼搏呢?

image.png

下定決心后,立刻用吃奶的力氣做了兩下臥推。。。哎呀媽呀,太累了!

點(diǎn)杯 奶茶 補(bǔ)充補(bǔ)充能量吧~ 有能量才有力氣鍛煉 ~

image.png

但是畢竟我不是個(gè) 沒羞沒臊 的人,因?yàn)楹攘四滩?,心里還是有一丟丟 愧疚感 的,所以打算出門溜達(dá)溜達(dá)。順便緩解一下自己社恐的癥狀,暫時(shí)脫離虛擬的二次元生活,嘗試融入一下現(xiàn)實(shí)社會。當(dāng)我正在街上漫不經(jīng)心的向前走著時(shí),突然迎面走來一個(gè)妹子,朱唇玉面,頭發(fā)梳個(gè)丸子頭,身穿碎花裙子,曼妙身材呼之欲出。

image.png

我遠(yuǎn)遠(yuǎn)看去,感覺妹子仿佛在和我微笑,但是當(dāng)妹子越走越近,社恐又羞澀的我沒敢和她對視,而是選擇低頭默默地繼續(xù)往前走。但是走著走著,腦中一個(gè)聲音狠狠地訓(xùn)斥我:“ShaderJoy,你出門不就是為了打破惡性循環(huán)的嗎?既然上天都給你安排了這樣的一個(gè)千載難逢的機(jī)會,你都不選擇把握,你都這么大年齡了,還怕個(gè)什么雞毛?就算被拒絕身上能掉塊肉嗎?

言之有理??!這個(gè)心靈的聲音

image.png

我重新鼓起了勇氣,稍稍加快了腳步往回走尋覓妹子的蹤影??墒亲吡艘粫?,卻再沒看到妹子的身影,我頓時(shí)感到有些失望,后悔當(dāng)時(shí)自己沒有好好把握機(jī)會,果然世上沒有后悔藥。。。

image.png

正在我內(nèi)心懊惱的時(shí)候,好巧不巧的,妹子居然出現(xiàn)在我前方不遠(yuǎn)處,原來她也在往回走!難道她也是來找我的嗎?!天吶,難道我這個(gè)大齡單身猿今天終于要逆天走 “狗屎運(yùn)” 。。。啊呸,“桃花運(yùn)” 了嘛!~

我整理了一下衣服,當(dāng)妹子走到我跟前的時(shí)候,我仿佛看見了她又微微沖我一笑,此時(shí)我決心一定要把握住這次機(jī)會上前和她搭訕了,剛說:“你好……”。

誰知 “好” 字還沒說出口,妹子就驚恐地 “咻” 得一下以光速 “彈開” 了,臉上還滿是嫌棄的表情,躲得遠(yuǎn)遠(yuǎn)的,然后迅速消失,留我一人尬在原地,原來上面的那一切都是我的幻覺。。。她壓根沒有對我微笑,哪有什么狗血純愛偶像劇的上天安排。。。

image.png

隨著我這次的搭訕失敗,我又回到了上面的 “惡性循環(huán)” 圈子里。。。

image.png

算法感悟

不過沒關(guān)系,我又通過這次慘痛的失敗,悟出了關(guān)于算法的道理 —— 我所身處的 惡性循環(huán) 不就很類似

LeetCode 61 Rotate List (旋轉(zhuǎn)鏈表) 嘛,命運(yùn)之輪一直在周而復(fù)始的循環(huán)旋轉(zhuǎn)。。。

好了,為了簡單起見舉個(gè)例子,原鏈表如下,

l = 5

1->2->3->4->5->nullptr

k = 2 的情況下

4->5->1->2->3->nullptr


///@note 代碼原作者: Huahua

///      詳細(xì)注釋:ShaderJoy

class Solution {

public:

  ListNode* rotateRight(ListNode* head, int k) {

    if (!head) return head;   

    int l = 1;                                    ///< 記錄鏈表的長度,默認(rèn)為 1

    ListNode* tail = head;                        ///< 尾指針,初始化指向鏈表頭部

    while (tail->next) { tail = tail->next; ++l; } ///< 遍歷鏈表,記錄鏈表的長度,同時(shí)尾指針指向鏈表尾部

    k %= l; ///< 由于是循環(huán)鏈表,所以需要排除結(jié)果重復(fù)的步數(shù),得到實(shí)際的旋轉(zhuǎn)次數(shù)

    if (k == 0) return head; ///< 無需循環(huán)

    /// @note ★

    ListNode* prev = head;            ///< 作用:指向要操作結(jié)點(diǎn)的前一個(gè)結(jié)點(diǎn)。初始為鏈表頭部

    while (--l > k) prev = prev->next; ///< prev 向后移動 l-k-1 步            【例子中的 3】

    ListNode* new_head = prev->next;  ///< 然后保存 prev 后面的結(jié)點(diǎn)作為新頭 【例子中的 3 所指的下一個(gè),是 4】

    tail->next = head;                ///< 將舊頭鏈接到鏈表尾部            【例子中的 1】

    prev->next = nullptr;              ///< 處理新尾部                      【例子中的 3 所指的下一個(gè),斷開 4】

    return new_head;

  }

};

其中為了加深記憶,再次將 關(guān)鍵步驟 ★ 總結(jié)如下

1. 將 prev 移動到待操作(新頭)結(jié)點(diǎn)的前一個(gè)結(jié)點(diǎn);

2. 保存待操作結(jié)點(diǎn)為 new_head;

3. 將 head 鏈接到鏈表尾端;

4. 斷開 prev 和原先其下一個(gè)(即新頭)結(jié)點(diǎn)的鏈接

結(jié)尾

好了,算法挺簡單的,幾句話就介紹完了,我要去默默療傷了(希望我的慘痛經(jīng)歷能夠讓大家對這個(gè)算法題目和代碼有深刻印象,那也就值了

image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 考察鏈表的題目不會要求我們時(shí)間復(fù)雜度,因?yàn)殒湵聿⒉幌袷菙?shù)組那樣,可以方便的使用各種排序算法和查找算法。因?yàn)殒湵砩婕?..
    熊大狀閱讀 716評論 0 1
  • 題目 輸入一個(gè)鏈表,輸出該鏈表中倒數(shù)第k個(gè)節(jié)點(diǎn)。 為了符合大多數(shù)人的習(xí)慣,本題從1開始計(jì)數(shù),即鏈表的尾節(jié)點(diǎn)是倒數(shù)第...
    Longshihua閱讀 303評論 0 2
  • 上篇文章介紹了數(shù)組,哈希表,字符串相關(guān)的算法,這篇文章介紹另一個(gè)重要的數(shù)據(jù)結(jié)構(gòu),鏈表 鏈表特點(diǎn) 鏈表,和數(shù)組相比較...
    bigonelby閱讀 340評論 0 0
  • 本來以為一篇就能寫完的,后來又感覺一篇多了一些,所以關(guān)于鏈表的簡單算法題有加了個(gè)續(xù)篇,和上一篇一樣,難度不會太大。...
    zero_sr閱讀 605評論 0 4
  • 摘要 本文是一些刷題筆記。梳理鏈表的問題常見的一些手段。如翻轉(zhuǎn)鏈表,合并鏈表,環(huán)形鏈表等等 寫在最前面的話 做題目...
    東方胖閱讀 1,176評論 0 0

友情鏈接更多精彩內(nèi)容