反转链表
- 双指针
- 递归方式
struct ListNode{
ListNode* next;
int val;
ListNode(int t=0):val(t),next(nullptr){}
};
ListNode* reverseList(ListNode* node){
ListNode *head = nullptr;
//利用头插法进行反转
//head指向已反转好的第一个节点
//node指向未反转的第一个节点
//将node加入head
while(node){
ListNode* tmp = node->next;
node->next = head;
head = node;
node = tmp;
}
return head;
}
ListNode* reverseList(ListNode* node){
//递归终止条件
if(!node||!node->next) return node;
ListNode* tmp = reverseList(node->next);
//得到node->next反转好的链表
//此时node->next指向tmp链表中的最后一个
//下面将node加入tmp中
node->next->next = node;
//并断开node与tmp最后一个节点的连接
node->next = nullptr;
return tmp;
}