剑指offer-16:反转链表(单链表逆序)

来源:互联网 发布:凯聪网络摄像头app 编辑:程序博客网 时间:2024/06/05 11:46

定义一个函数,输入一个单链表的头结点,反转该链表并输出反转后链表的头结点。

分析

  • 对当前结点,修改其next指针指向前面结点,则需要有前驱结点的值,同时保存后驱结点的值防止断链。
  • 当前结点反转后,当前结点变为前驱结点,后驱结点变为当前结点。循环迭代,直至当前结点为尾结点。

代码:

// 链表结点定义struct ListNode{    int value;    ListNode * pNext;};ListNode * ReverseList(ListNode * pHead){    if(pHead == nullptr)        return nullptr;    ListNode * pReverseHead = nullptr; //反转后的头结点,待返回    ListNode * pNode = pHead; //当前结点    ListNode * pPrev = nullptr; // 前驱结点    ListNode * pNext = nullptr; // 后继结点    // 当前结点指向Null时结束    while(pNode != nullptr)    {        pNext = pNode ->pNext;        // 若真,则说明当前结点为尾结点        if(pNext == nullptr)            pReverseHead = pNode;        // 反转操作        pNode->pNext = pPrev;        pPrev = pNode;        pNode = pNext;    }    return pReverseHead;}
原创粉丝点击