演算法篇之鍊錶操作

2021-10-19 14:22:12 字數 1018 閱讀 4266

主要是積累演算法篇關於鍊錶操作,我們都知道鍊錶有單向鍊錶, 雙向鍊錶, 環形鍊錶等各種形式。但是這部落格主要是積累相關鍊錶操作。

如下說到的listnode定義如下

typedef

struct node

}listnode;

常用兩種方法:

就地反轉法

在於不通過申請新的鍊錶, 基於原鍊錶實現就地反轉, 需要多申請鍊錶指標, 但是空間與時間上都是較優的。

listnode*

reverselistofheadnodeinsertmethod

(listnode* head)

return newhead-

>next;

}

頭結點插入法

通過申請新的煉表頭結點, 基於頭結點與上乙個插入節點之間插入新的節點·。

listnode*

reverselistofheadnodeinsertmethod

(listnode* head)

return newhead-

>next;

}

參考部落格

相鄰元素實現反轉

listnode*

(listnode* head)

listnode* ret = head-

>next;

listnode* behind =

null

;while

(head-

>next)

listnode* pnext = head-

>next-

>next;

if(pnext)

else

headnext-

>next = head;

behind = head;

if(head-

>next)

}return ret;

}

演算法之遞迴(3) 鍊錶操作

演算法之遞迴 3 鍊錶操作 遞迴 2 嘗試了乙個單鏈表的遍歷,同時又分析了如何新增自己的操作,是在遞迴呼叫之前,還是在遞迴呼叫之後。今天,打算將問題深入一下,即新增相應的操作在遞迴的過程中。解法一 逐層遞迴,遍歷到最後乙個節點,並從返回的節點一次向後遞迴,遍歷n次,找到倒數第n個節點。private...

鍊錶演算法之鍊錶分化

對於乙個鍊錶,我們需要用乙個特定閾值完成對它的分化,使得小於等於這個值的結點移到前面,大於該值的結點在後面,同時保證兩類結點內部的位置關係不變。給定乙個鍊錶的頭結點head,同時給定閾值val,請返回乙個鍊錶,使小於等於它的結點在前,大於等於它的在後,保證結點值不重複。測試樣例 3 思路 新建兩個鍊...

面試演算法篇 鍊錶

1.如何在一次遞迴後找到單鏈表的中間元素 思路 使用兩個指標,乙個一次走一步,乙個一次走兩步,一次走兩步的走完時,另乙個剛好走到中間.public listnode findmid listnode head slow slow.next quick quick.next.next return s...