1. 程式人生 > 實用技巧 >K個一組反轉連結串列(golang)

K個一組反轉連結串列(golang)

//leetcode submit region begin(Prohibit modification and deletion)
/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func reverseKGroup(head *ListNode, k int) *ListNode {
    
    length:=0
    pre:=head
    //計算連結串列長度
    for pre!=nil{
        length
++ pre = pre.Next } //k個一組的次數 time:=length/k dummy:=new(ListNode) dummy.Next = head pre = dummy //每一組前面的數,頭插法,每次都把move放在pre後面 var nexthead,move *ListNode for i:=0;i<time;i++{ nexthead = pre.Next //每個k長度的開頭,逐漸變為末尾 move = nexthead.Next//第二個,不斷向後移動,把move插入到pre後面,
for j:=0;j<k-1;j++{ nexthead.Next = move.Next move.Next = pre.Next pre.Next = move move = nexthead.Next } //經過頭插法,nexthead逐漸變為結尾,結束一輪迴圈時,nexthead變為結尾,是下一個k長度的pre, pre = nexthead //下一個k同樣的方式,頭插法放pre後面 } return
dummy.Next }

迭代法,還有遞迴法,