代码随想录 跟随笔记 反转链表

反转链表

力扣题目链接

1 双指针解法 :

关键点:两个用来翻转链表中指针的指向,后面一个用来存值,移动到最后返回头节点。


//定义三个指针
ListNode *middle=head;
ListNode *front=NULL;
ListNode *latter;

//移动上述三个的位置
//终止条件
while(middle) //停止条件middle为空,说明已经移动到最后一位结束了
{
       //翻转操作
    latter=middle->next;//在middle指向front之前,把下一位先存值
      middle->next=front;
    //翻转完成
    
    //向后移动
    front=middle;
    middle=latter;//这里要先让最前面的front往前走一个,因为如果先走middle,front就找不到middle了
}
return front;

2 递归解法

相当于把双指针解法中把三个指针手动向前移动一位的操作改成函数递归操作了

ListNode *reverse(ListNode *front,ListNode *middle)
{
    if(middle=NULL) return front;//先写判断条件
    //翻转操作
    ListNode *latter=middle->next;
    middle->next=front;
    return reverse(middle,latter);
}

ListNode *reverseList(ListNode *head)
{
    return reverse(NULL,head);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值