因為只能順序訪問,所以不能用兩個指針一個一個的顛倒。 想的新思路是:從第二個結點開始,從鏈表上拆下來,往頭結點后面插入。 注意:因為每一次都把第二個元素拆下來,所以指針不用后移,每次都是拆那個位置。 ...
因為只能順序訪問,所以不能用兩個指針一個一個的顛倒。 想的新思路是:從第二個結點開始,從鏈表上拆下來,往頭結點后面插入。 注意:因為每一次都把第二個元素拆下來,所以指針不用后移,每次都是拆那個位置。 ...
1.問題描述 如何實現簡單快速的實現單鏈表的逆置。(要求時空復雜度盡量低。) 2.問題解法 最簡單的一個思路是遍歷一遍鏈表,存儲到臨時數組,然后利用這個臨時數組重新建立一個新的鏈表。這樣的話時間復雜度暫且認為是O(n),但是卻需要O(n)的空間復雜度。下面說另外一種不需要輔助空間 ...
void deleteLinkList(LinkList *&L){ LinkList *p=L->next,*s,*q; while(p!=N ...
所謂“就地是指輔助空間復雜度為O(1)。 解法一:將頭結點摘下,然后從第一結點開始,依次前插入到頭結點的后面(頭插法),直到最后一個結點為止。 代碼如下 解法二: 通過若干操作將指針反轉達到逆置的目的。 假設pre、p和r指向3個相鄰的結點,如上圖 ...
本題要求編寫函數實現帶頭結點的單鏈線性表的就地逆置操作函數。L是一個帶頭結點的單鏈表,函數ListReverse_L(LinkList &L)要求在不新開辟節點的前提下將單鏈表中的元素進行逆置,如原單鏈表元素依次為1,2,3,4,則逆置后為4,3,2,1。 函數接口定義 ...
題目: 假設有一個沒有頭指針的單鏈表。一個指針指向此單鏈表中間的一個節點(非第一個節點, 也非最后一個節點)。請將該節點從單鏈表中刪除。 解答: 典型的“狸貓換太子”, 若要刪除該節點,正常情況下,應該要知道該節點的前面節點的指針,但是由於單鏈表中沒有頭 ...
給定一個帶頭結點的單鏈表,編寫算法將其原地逆置。所謂“原地”是指空間復雜度為O(1)。有兩種方法,頭插法和冒泡法。這兩種方法的時間復雜度均為O(n)。 頭插法 思路 我們知道,用頭插法建立鏈表,得到的鏈表中元素的順序和輸入的順序相反,所以利用這一特點,可以將鏈表逆置。 給定一個帶頭結點 ...