主要是積累演算法篇關於鍊錶操作,我們都知道鍊錶有單向鍊錶, 雙向鍊錶, 環形鍊錶等各種形式。但是這部落格主要是積累相關鍊錶操作。
如下說到的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...