LeetCode-206. 反转链表

在这里插入图片描述
地址:https://leetcode-cn.com/problems/reverse-linked-list/
思路:双指针 || 递归
一、双指针:从链表头结点p=head开始反转,需要先保存pi=p->next,再将p->next指向p本身,同时记录已反转链表的头结点head=p(而初始头结点为NULL),然后遍历到下一个节点即可
二、递归:思路相同,递归到下一节点,在将当前节点与其下一节点指针反转head->next->next=head,然后令head=NULL(使反转后的链表末节点->next=NULL)即可
Code 1 双指针:

class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        if(head==NULL)  return head;
        ListNode *p=head,*pi;
        head=NULL;
        while(p!=NULL){
            pi=p->next;
            p->next=head;
            head=p;
            p=pi;
        }
        return head;
    }
};

Code 2 递归:

class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        if(head==NULL||head->next==NULL)  return head;
        ListNode *cur=reverseList(head->next);
        head->next->next=head;
        head->next=NULL;
        return cur;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值