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 輸...