add new solutions
This commit is contained in:
parent
9c2c959a9b
commit
9a10695e8c
29 changed files with 1074 additions and 2 deletions
51
solutions/0/q25/solution.go
Normal file
51
solutions/0/q25/solution.go
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
package q25
|
||||
|
||||
type ListNode struct {
|
||||
Val int
|
||||
Next *ListNode
|
||||
}
|
||||
|
||||
func reverse(begin *ListNode, k int) (newHead, newTail *ListNode) {
|
||||
tail := begin
|
||||
for range k - 1 {
|
||||
if tail.Next == nil {
|
||||
return begin, tail // no enough nodes
|
||||
}
|
||||
tail = tail.Next
|
||||
}
|
||||
|
||||
// Reverse
|
||||
cur := begin
|
||||
prev := tail.Next
|
||||
for range k - 1 {
|
||||
t := cur.Next
|
||||
cur.Next = prev
|
||||
prev, cur = cur, t
|
||||
}
|
||||
cur.Next = prev
|
||||
return cur, begin
|
||||
}
|
||||
|
||||
func reverseKGroup(head *ListNode, k int) *ListNode {
|
||||
if k < 2 {
|
||||
return head
|
||||
}
|
||||
|
||||
var ret, prevTail *ListNode
|
||||
p := head
|
||||
for p != nil {
|
||||
newHead, newTail := reverse(p, k)
|
||||
if ret == nil {
|
||||
ret = newHead
|
||||
}
|
||||
if prevTail != nil {
|
||||
prevTail.Next = newHead
|
||||
}
|
||||
prevTail = newTail
|
||||
p = newTail.Next
|
||||
}
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
var _ = reverseKGroup
|
||||
Loading…
Add table
Add a link
Reference in a new issue