反转链表

反转链表

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);
}
全部评论

相关推荐

球球别再泡了:坏,我单9要了14
点赞 评论 收藏
分享
10-07 23:57
已编辑
电子科技大学 Java
八街九陌:博士?客户端?开发?啊?
点赞 评论 收藏
分享
5 2 评论
分享
牛客网
牛客企业服务