leetcode反转链表

4 篇文章 1 订阅
3 篇文章 1 订阅

1.双指针

struct ListNode* reverseList(struct ListNode* head){
struct ListNode*pre=NULL;
struct ListNode*curr=head;
struct ListNode* next = NULL;
while(curr){
    next=curr->next;
     curr->next=pre;
     pre=curr;
     curr=next;
     


}
return pre;
}

2.递归

struct ListNode* reverseList(struct ListNode* head) {
    if (head == NULL || head->next == NULL) {
        return head;
    }
    struct ListNode* newHead = reverseList(head->next);
    head->next->next = head;
    head->next = NULL;
    return newHead;
}

递归中的return常用来作为递归终止的条件,但是对于返回数值的情况,要搞明白它是怎么返回的。递归的方式就是自己调用自己,而在有返回值的函数中,上一层的函数还没执行完就调用下一层,因此,当达到递归终止条件时,首先return的是最底层调用的函数,return之后,继续执行上一层调用该函数之后的代码,此时我们看到的是上一层的情况,当上一层剩余的代码执行完之后,表示上一层的函数也结束,此时再返回上上一层,执行递归代码之后的代码,如此往复循环,直到返回到最上层,结束整个递归过程。在这里举例中,当head=3的时候return head,此时head=3,cur为3,cur这句话不再执行,只需要执行后面未执行的内容,第一次head->next->next=head这句head->next是null,null又指回3,改变了方向,然后删除向右边的指向(个人感觉第一次这个意义不大),然后返回上一层,执行head->next->next=head,也就是2->next=3,3->next返回2,然后再删除向右的节点,以此类推。关于递归可以看这个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值