¶反转链表 123456789101112131415161718192021222324252627282930313233package mainimport ( "fmt")func main() { head := &ListNode{ 1, &ListNode{ 2, &ListNode{ 3, &ListNode{ 4, &ListNode{ 5, nil}}, }, }, } for list := reverseList(head); list != nil; list = list.Next { fmt.Println(list.Val) }}type ListNode struct { Val int Next *ListNode}func reverseList(head *ListNode) *ListNode { var cur, prev *ListNode = head, nil for cur != nil { cur.Next, prev, cur = prev, cur, cur.Next } return prev} ¶交换相邻两个节点 123456789101112131415161718192021222324252627282930313233package mainimport "fmt"func main() { head := &ListNode{ 1, &ListNode{ 2, &ListNode{ 3, &ListNode{ 4, nil}, }, }, } for list := swapPairs(head); list != nil; list = list.Next { fmt.Println(list.Val) }}type ListNode struct { Val int Next *ListNode}func swapPairs(head *ListNode) *ListNode { if head == nil || head.Next == nil { return head } newHead := head.Next head.Next = swapPairs(newHead.Next) newHead.Next = head return newHead} ¶判断链表是否有环 123456789101112131415161718192021222324252627282930313233343536package mainimport "fmt"func main() { cycle := &ListNode{ 2, &ListNode{ 0, &ListNode{ -4, nil}}} cycle.Next.Next.Next = cycle head := &ListNode{ 3, cycle, } fmt.Println(hasCycle(head))}type ListNode struct { Val int Next *ListNode}func hasCycle(head *ListNode) bool { if head == nil || head.Next == nil { return false } slow, fast := head, head for fast != nil && fast.Next != nil { slow, fast = slow.Next, fast.Next.Next if slow == fast { return true } } return false}