K個一組反轉連結串列(golang)
阿新 • • 發佈:2020-12-30
//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
}
迭代法,還有遞迴法,