反转链表

反转链表

http://www.nowcoder.com/questionTerminal/75e878df47f24fdc9dc3e400ec6058ca

思路分析:

  • 正向链表,只能访问当前结点的下一个结点,无法访问上一个结点。要反转,因此需要一个指针保存上一个结点。
  • 调整当前结点的next指针指向上一个结点后,链表断开,无法访问到下一个结点,因此在反转指针之前,需要一个指针保存当前结点的下一个结点。
  • 当然,当前结点也是需要一个指针来索引,因此本题需要设置三个指针。(或者把传入的头结点当作当前结点)

code

//迭代
ListNode* ReverseList(ListNode* pHead)
{
    if (!pHead)
        return nullptr;
    ListNode* curNode=pHead;//当前结点
    ListNode* preNode = nullptr;//前一个结点
    ListNode* nextNode = nullptr;
    while (curNode)
    {
        nextNode = curNode->m_pNextNode;//保存下一个结点
        curNode->m_pNextNode = preNode;// 让当前节点指向前一个节点位置,反转
        preNode = curNode;//更新指针
        curNode = nextNode;// 当前节点往右继续走
    }
    return preNode;//注意是输出preNode,因为curNode指向了nullptr
}

//递归
ListNode* ReverseList_digui(ListNode* cur, ListNode* pre)
{
    if (!cur)
        return pre;//结束条件
    ListNode* next = cur->m_pNextNode;
    cur->m_pNextNode = pre;
    pre = cur;
    cur = next;
    return ReverseList_digui(cur, pre);
}
ListNode* ReverseList1(ListNode* pHead)
{
    if (!pHead)
        return nullptr;
    ListNode* cur = pHead;
    ListNode* pre = nullptr;
    return ReverseList_digui(cur, pre);
}
全部评论

相关推荐

兄弟们,绩效自评一定得给自己打A啊!千万别谦虚给低分,不然领导正愁给谁高分,你这不就“主动请缨”了嘛,而且多数领导不会给你更高分。我几年前试用期绩效自评打了B,领导就给了同等级,还好是试用期。真别等领导主动给高评价!
准备进厂的劳伦斯很迷人:小学时候有个册子 自评 小组 老师 我谦虚打了个b 小组别人给我打b 老师来句我觉得能给他打a 但是小组长说他自评是b怎么能打高呢 那时候我才明白的道理
点赞 评论 收藏
分享
01-29 16:08
已编辑
华南农业大学 Java
点赞 评论 收藏
分享
02-01 19:48
门头沟学院 Java
神哥了不得:(非引流)直接暑期吧,没时间日常了,老鱼简历把水印去了,或者换个模板,简历字体大小都不太行,建议换2个高质量的项目,面试应该还会再多一些
点赞 评论 收藏
分享
评论
5
2
分享

创作者周榜

更多
牛客网
牛客企业服务