
反转链表-精简实现
func reverseList(head *ListNode) *ListNode {var cur, prev *ListNode = head, nilfor cur != nil {cur.Next, prev, cur = prev, cur, cur.Next}return prev}
图解:

两两交换链表节点-精简实现
func swapPairs(head *ListNode) *ListNode {prev := &ListNode{Next:head}newHead := prevfor prev.Next != nil && prev.Next.Next != nil {a := prev.Nextb := a.Nextprev.Next, b.Next, a.Next =b, a, b.Nextprev = a}return newHead.Next}
检测链表是否有环
解法:
- 一直遍历, 如果超时则有环
- 利用 map 记录访问过的节点
- 快慢指针
快慢指针解法:
/*** Definition for singly-linked list.* type ListNode struct {* Val int* Next *ListNode* }*/func hasCycle(head *ListNode) bool {slow, fast := head, headfor slow != nil && fast != nil && fast.Next != nil {slow = slow.Nextfast = fast.Next.Nextif slow == fast {return true}}return false}
