剑指offer24题-翻转链表

剑指offer24题-翻转链表

题目描述

定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

题目分析

  1. 在尝试翻转的过程中,发现当反转当前节点到前置节点操作进行时,如不加任何操作,会出现断链的效果,即当前节点的后置节点需要用临时变量进行保存。
  2. 在虚线的下一行,表示了每一次的翻转循环,指针pre,cur,temp相对位置关系。cur为当前节点(待翻转的节点)可以看出,每次循环前需记住当前节点的后置节点temp,还有前驱结点pre,反转的核心就是cur->next = pre
// 单链表的定义
struct ListNode{
    int val; //节点值
    ListNode *next;//next指向下一节点
    ListNode(int x):val(x),next(NULL){}
};
class Solution{
public:
    ListNode * reverseList(ListNode* head){
        ListNode* cur = head;  //初始化cur 在head位置
        ListNode* temp;  //temp初始化每次都是重复的循环,放在循环中定义
        ListNode* pre = nullptr;  //如上图数字1节点cur->next = NULL,并且原链表中cur在第一位,pre理所当然为空指针。
        while(cur){ //待翻转节点不为空时进行循环
            temp = cur->next; //记录后继
            cur->next = pre; //翻转操作
            pre = cur; //pre向后移
            cur = temp;//cur向后移
        }
        return pre; //此时cur为空,pre不为空。返回pre即为新链表的头结点                    
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值