image.png

反转一般用三个节点最好处理 前一个节点 ,当前节点,后一个节点

最简洁版本

  1. func reverseList(head *ListNode) *ListNode {
  2. var pre *ListNode
  3. curr := head
  4. for curr!= nil{//当为空表示迭代结束
  5. //前一个值 ,当前值,后一个值
  6. pre,curr,curr.Next = curr,curr.Next,pre
  7. }
  8. return pre
  9. }

image.png

  1. func revertNode(head *ListNode)*ListNode{
  2. var pre *ListNode
  3. curr :=head
  4. for curr!= nil{
  5. next := curr.Next
  6. curr.Next = pre
  7. pre = curr
  8. curr = next
  9. }
  10. return pre
  11. }

递归

  1. func revertNode(head *ListNode)*ListNode{
  2. if head==nil||head.Next==nil {
  3. return head
  4. }
  5. next := head.Next
  6. n := revertNode(next)
  7. next.Next = head
  8. head.Next = nil
  9. return n
  10. }