递归实现与非递归实现,以及头插法
/**
* @Description: 反转链表 非递归方式
*
* @Date:
* @Author: fuGuoWen
* @Return
* @Throws
*/
func reverseList(head *ListNode) *ListNode {
var pre *ListNode
var next *ListNode
for head != nil {
next = head.Next
head.Next = pre
pre = head
head = next
}
return pre
}
/**
* @Description: 反转链表 递归方式
*
* @Date:
* @Author: fuGuoWen
* @Return
* @Throws
*/
func reverseList2(head *ListNode) *ListNode {
if head == nil || head.Next == nil {
return head
}
next := head.Next
pre := reverseList2(next)
next.Next = head
head.Next = nil
return pre
}
/**
* @Description: 头插法反转链表
*
* @Date:
* @Author: fuGuoWen
* @Return
* @Throws
*/
func reverseList3(head *ListNode) *ListNode {
temp := ListNode{0, nil}
temp.Next = head
pre := temp
q := temp.Next
for head != nil {
remove := q.Next
q.Next = q.Next.Next
remove.Next = pre.Next
pre.Next = remove
head = head.Next
}
return temp.Next
}