Algorithm 鍊錶演算法中啞結點作用

2021-09-12 14:49:56 字數 959 閱讀 6231

sort a linked list using insertion sort.

很好理解,就是遍歷每個結點cur,同時記錄其前乙個結點pre。

如果碰到某個cur的值小於pre,從頭結點開始遍歷,直到找到應該插入的位置。

不使用啞結點的問題就是多判斷了乙個cur要替換頭結點,頭結點往後移的狀況,這時不能用遍歷的**

需要額外寫一種情況

if(head.val > cur.val)
/**

* definition for singly-linked list.

* public class listnode

* }*/public class solution else

p = c;

c = c.next;}}

}else pre = pre.next;

}return head;

}}

大致思路其實是一致的,但是他新建了乙個啞結點作為「新的鍊錶」(其實就建了乙個結點)。

這樣就不可能有替換頭結點的情況了,因為頭結點的值為integer.min_value。

*和啞結點沒關係的地方:查詢插入位置的時候用的是pre.next,而不是像上面維護兩個指標p/h來查詢插入位置。

**也就是pre代表了p,pre.next代表了h,verygood

public static listnode insertionsortlist(listnode head) 

cur.next = pre.next;

pre.next = cur;

cur = next;

}return dummy.next;

}}

演算法 鍊錶 鍊錶分隔(鍊錶劃分)

給定乙個鍊錶和乙個特定值 x,對鍊錶進行分隔,使得所有小於 x 的節點都在大於或等於 x 的節點之前。你應當保留兩個分割槽中每個節點的初始相對位置。示例 輸入 head 1 4 3 2 5 2,x 3 輸出 1 2 2 4 3 5 兩個臨時頭結點和尾節點,組成兩個鍊錶,分別存放較小和較大節點 完成後...

鍊錶演算法之鍊錶分化

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

初級演算法 鍊錶 環形鍊錶

給定乙個鍊錶,判斷鍊錶中是否有環。為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置 索引從 0 開始 如果 pos 是 1,則在該鍊錶中沒有環。示例 1 輸入 head 3,2,0,4 pos 1 輸出 true 解釋 鍊錶中有乙個環,其尾部連線到第二個節點。示例 2 輸...