LeetCode 206. Reverse Linked List
type Node struct {
Val int
Next *Node
}
func reverseList(h *Node) *Node{
var cur *Node = h
var prev *Node = nil
for cur != nil {
cur.Next,prev,cur = prev,cur,cur.Next
}
return prev
}
LeetCode 24. Swap Nodes in Pairs
func swapPairs(head *Node) *Node {
list := &Node{Next: head}
for prev, node := list, list.Next; node != nil; node = node.Next {
if node.Next != nil {
swapNode(prev, node, node.Next)
prev = node
}
}
return list.Next
}
func swapNode(prev, node, next *Node) {
prev.Next = next
node.Next = next.Next
next.Next = node
}
LeetCode 141. Linked List Cycle
思路:
func hasCycle(head *Node) bool {
if head == nil || head.Next == nil {
return false
}
quickP, slowP := head, head
for quickP != nil {
quickP = quickP.Next
if quickP != nil {
quickP = quickP.Next
}
slowP = slowP.Next
if slowP == quickP {
return true
}
}
return false
}
LeetCode 142. Linked List Cycle 2
思路:
func detectCycle(head *ListNode) *ListNode {
if head == nil || head.Next == nil {
return nil
}
slow, fast := head.Next, head.Next.Next
for fast != nil && fast.Next != nil && slow != fast {
slow, fast = slow.Next, fast.Next.Next
}
if slow != fast {
return nil
}
for slow != head {
slow, head = slow.Next, head.Next
}
return slow
}
LeetCode 25. Reverse Nodes in K-Group
思路:
func reverseKGroup(head *ListNode, k int) *ListNode {
l := head
s := 0
for l != nil {
s++
l = l.Next
}
ks := head
ke := head
retHead := ListNode{}
retList := &retHead
for count := int(s / k); count != 0; count-- {
for i := 1 ; i < k ; i++ {
ke = ke.Next
}
ken := ke
if ke !=nil{
ken = ke.Next
}
ke.Next = nil
retList.Next = reverseList(ks)
retList = ks
ks = ken
ke = ken
}
retList.Next = ke
return retHead.Next
}
func reverseList(h *ListNode) *ListNode{
var cur *ListNode = h
var prev *ListNode = nil
for cur != nil {
cur.Next,prev,cur = prev,cur,cur.Next
}
return prev
}
原文:https://www.cnblogs.com/weiweng/p/12485887.html