对单链表进行反转。
例如:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
注:链表反转可使用循环或者递归方式实现,您能否同时实现此两种算法?
题目出处:LeetCode
使用递归方式实现起来相对比较简单,步骤为:
使用循环方式实现的步骤为:
使用递归方式实现代码为:
https://github.com/leileiluoluo
func reverseList(head *ListNode) *ListNode {
if nil == head || nil == head.Next {
return head
}
p := head
q := reverseList(head.Next)
p.Next = nil
r := q
for nil != r.Next {
r = r.Next
}
r.Next = p
return q
}
使用循环方式实现代码为:
https://github.com/leileiluoluo
func reverseList(head *ListNode) *ListNode {
if nil == head || nil == head.Next {
return head
}
p := head
q := p.Next
p.Next = nil
for nil != q {
r := q.Next
q.Next = p
p = q
q = r
}
return p
}