给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
示例 1:
输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1]2.题解:
方法 一:迭代
C++:
class Solution {
public:
ListNode* reverseList(ListNode* head) {
if (!head) return NULL ;
ListNode* a = head ;
ListNode* b = a->next ;
while ( b) {
auto c = b->next ;
b->next = a ;
a = b ;
b = c ;
}
head->next = NULL ;
return a ;
}
};
Golang :
func reverseList(head *ListNode) *ListNode {
if (head == nil ) {return nil }
a := head
b := head.Next
for b != nil {
c := b.Next
b.Next = a
a = b
b = c
}
head.Next = nil
return a
}
方法 二: 递归
C++ :
class Solution {
public:
ListNode* reverseList(ListNode* head) {
if(!head || !head->next) return head ;
auto tail = reverseList(head->next) ;
head->next->next = head ;
head->next = NULL ;
return tail ;
}
};
Golang:
func reverseList(head *ListNode) *ListNode {
if head == nil || head.Next == nil {
return head
}
tail := reverseList(head.Next)
head.Next.Next = head
head.Next = nil
return tail
}
原题: 反转链表


