剑指 Offer 24. 反转链表

剑指 Offer 24. 反转链表

easy

定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。

示例:

1
2
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

三指针

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
// 三指针
func reverseList(head *ListNode) *ListNode {
	var prev, next *ListNode // 默认为nil
	cur := head
	for cur != nil {
		next = cur.Next
		cur.Next = prev
		prev = cur
		cur = next
	}
	return prev
}

递归

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
// 递归
func reverseList2(head *ListNode) *ListNode {
	if head == nil || head.Next == nil {
		return head
	}
	newHead := reverseList2(head.Next)
	head.Next.Next = head
	head.Next = nil
	return newHead
}